project( [LANGUAGES] [...])
将Name存到PROJECT_NAME,同时设置变量
PROJECT_SOURCE_DIR
, _SOURCE_DIR
PROJECT_BINARY_DIR
, _BINARY_DIR
include_directories([AFTER|BEFORE] [SYSTEM] dir1 [dir2 ...])
指定头文件的搜索路径,相当于指定gcc的-I参数 INCLUDE_DIRECTORIES(${HELLO_SOURCE_DIR}/Hello) #增加Hello为include目录
target_link_libraries( ... - ... ...)
添加链接库,相同于指定-l参数 TARGET_LINK_LIBRARIES(demo Hello) #将可执行文件与Hello连接成最终文件demo
link_directories(directory1 directory2 ...)
动态链接库或静态链接库的搜索路径,相当于gcc的-L参数 LINK_DIRECTORIES(${HELLO_BINARY_DIR}/Hello)#增加Hello为link目录
add_library( [STATIC | SHARED | MODULE]
[EXCLUDE_FROM_ALL]
[source1] [source2 ...])
ADD_LIBRARY(Hellohello.cxx) #将hello.cxx编译成静态库如libHello.a
add_executable( [WIN32] [MACOSX_BUNDLE]
[EXCLUDE_FROM_ALL]
[source1] [source2 ...])
ADD_EXECUTABLE(helloDemo demo.cxx demo_b.cxx) 指定编译,好像也可以添加.o文件,将cxx编译成可执行文件
add_subdirectory(source_dir [binary_dir]
[EXCLUDE_FROM_ALL])
ADD_SUBDIRECTORY(Hello) #包含子目录
aux_source_directory( )
基本语法是:AUX_SOURCE_DIRECTORY(dir VARIABLE)
,作用是发现一个目录下所有的源代码文件并将列表存储在一个变量中,这个指令临时被用来自动构建源文件列表,因为目前cmake还不能自动发现新添加的源文件。比如:
可以通过后面提到的FOR EACH
指令来处理这个LIST。
cmake_minimum_required(VERSION [...] [FATAL_ERROR])
比如:CMAKE_MINIMUM_REQUIRED(VERSION 2.5 FATAL_ERROR)
如果cmake版本小与2.5,则出现严重错误,整个过程中止。
CMAKE_BINARY_DIR
PROJECT_BINARY_DIR
< projectname >_BINARY_DIR
这三个变量指代的内容是一致的,如果是in-source编译,指得就是工程顶层目录;如果是out-of-source编译,指的是工程编译发生的目录。PROJECT_BINARY_DIR
跟其它指令稍有区别,目前可以认为它们是一致的。
CMAKE_SOURCE_DIR
PROJECT_SOURCE_DIR
< projectname >_SOURCE_DIR
这三个变量指代的内容是一致的,不论采用何种编译方式,都是工程顶层目录。也就是在in-source编译时,他跟CMAKE_BINARY_DIR
等变量一致。PROJECT_SOURCE_DIR
跟其它指令稍有区别,目前可以认为它们是一致的。
(out-of-source build与in-source build相对,指是否在CMakeLists.txt所在目录进行编译。)
CMAKE_CURRENT_SOURCE_DIR
当前处理的CMakeLists.txt所在的路径,比如上面我们提到的src子目录。
CMAKE_CURRRENT_BINARY_DIR
如果是in-source编译,它跟CMAKE_CURRENT_SOURCE_DIR
一致;如果是out-of-source编译,指的是target编译目录。使用ADD_SUBDIRECTORY(src bin)
可以更改这个变量的值。使用SET(EXECUTABLE_OUTPUT_PATH <新路径>)
并不会对这个变量造成影响,它仅仅修改了最终目标文件存放的路径。
CMAKE_CURRENT_LIST_FILE
输出调用这个变量的CMakeLists.txt的完整路径
CMAKE_CURRENT_LIST_LINE
输出这个变量所在的行
CMAKE_MODULE_PATH
这个变量用来定义自己的cmake模块所在的路径。如果工程比较复杂,有可能会自己编写一些cmake模块,这些cmake模块是随工程发布的,为了让cmake在处理CMakeLists.txt时找到这些模块,你需要通过SET指令将cmake模块路径设置一下。比如SET(CMAKE_MODULE_PATH,${PROJECT_SOURCE_DIR}/cmake)
这时候就可以通过INCLUDE指令来调用自己的模块了。
EXECUTABLE_OUTPUT_PATH
新定义最终结果的存放目录
LIBRARY_OUTPUT_PATH
新定义最终结果的存放目录
PROJECT_NAME
返回通过PROJECT
指令定义的项目名称。