不区分大小写区分大小写用来指定工程名字和支持的语言
PROJECT(hello C CXX)
指定工程名字hello,支持语言c和c++,语言要大写
该指令隐式定义了两个变量
_BINARY_DIR,本例是HELLO_BINARY_DIR
_SOURCE_DIR,本例是HELLO_SOURCE_DIR
也就是前边部分是和工程名字绑定的,如果改变了工程名,用到这两个变量的地方都要修改,很麻烦。
现在使用 PROJECT_BINARY_DIR 和 PROJECT_SOURCE_DIR代替那两个
补充:
为包含PROJECT命令最近一个CMakeLists.tst文件所在路径,一般是顶层文件所在的路径为工程编译所在的路径,运行cmake的路径设置显示指定变量
SET(SRC t1.cpp t2.cpp t3.cpp ... )
指的是SRC就包含了后边的所有东西,都用空格隔开
向终端输出用户自定义信息
MESSAGE(STATUS "向终端输出信息1" "信息2")
生成可执行文件
左边写可执行文件的名字,右边写依赖,一般是依赖.cpp文件
ADD_EXECUTABLE(main main.cpp test.cpp)
或者借助SET关键字中设置的变量引用取值也可以,是一个意思
ADD_EXECUTABLE(main ${SRC})
没有任何关系
${var}空格或者分号分割SET(src "m ain.cpp"),文件名需要双引号引起来的,也可以省略。当文件名存在空格时,必须加双引号内部构建就是把所有的临时文件和工程文件放在同一目录下,不好区分,工程商一般使用外部构建
外部构建:新建build目录,所有编译生成的文件都单独存放,不对源文件造成影响
将src子目录添加到工程并指定编译输出路径为bin目录,他的作用告诉cmake我还有一个目录叫src,
ADD_LIBRARY(hello SHARE main.cpp)
用来构建静态库或共享库
hello 静态库或动态库的名字
共享库最终生成名字:lib + 库名 + .so = libhello.so
静态库最终生成名字:lib + 库名 + .a = libhello.a
SHARE ,动态库;STATIC,静态库
main.cpp源文件,需要哪些文件去生成这个库