include_directories
将指定目录添加到编译器的头文件搜索路径之下,指定的目录被解释成当前源码路径的相对路径。
它相当于g++选项中的-I参数的作用,也相当于环境变量中增加路径到CPLUS_INCLUDE_PATH变量的作用
include_directories ([AFTER|BEFORE] [SYSTEM] dir1 [dir2 ...])
编译时的路径搜索必须精确指定文件夹,makefile不会递归搜索子文件夹
After和before 关键字控制的是添加文件夹到列表的最后还是最前,makefile在搜索头文件时会按照该列表的顺序进行搜索,只要找到便停止搜索。
target_include_directories
指定目标依赖的头文件路径,功能和include_directories类似。不同的是include_directories是一个全局参数,所以的目标文件和下级CMakeList的目标文件共用;而target_include_directories则是单独针对某个对象的设置。
target_include_directories(<target> [SYSTEM] [BEFORE]
<INTERFACE|PUBLIC|PRIVATE> [items1...]
[<INTERFACE|PUBLIC|PRIVATE> [items2...] ...])
add_library
添加一个从source列表列出的文件构建而来的目标名为name的库。
add_library(<name> [STATIC | SHARED | MODULE]
[EXCLUDE_FROM_ALL]
[<source>...])
name必须全局唯一
构建库的源文件可以直接指定,也可以后续使用target_sources()指定
STATIC(静态库) SHARED(动态库) MODULE(模块库)用来指定库的类型。
-使用STATIC构建生成静态库(name.a),使用SHARED构建生成动态库(name.so)。
EXCLUDE_FROM_ALL:加了EXCLUDE_FROM_ALL属性的target在默认编译的时候,不会被编译,除非它被别的可执行文件或者库文件所依赖。
生成的库文件会放到当前编译的目录内。
add_executable
生成可执行文件
add_executable (<name> [WIN32] [MACOSX_BUNDLE]
[EXCLUDE_FROM_ALL]
[source1] [source2 ...])
source*是依赖的源文件,除了在该命令中指定外,还可以通target_sources命令添加依赖的源文件
target_sources
编译目标文件所依赖的源文件,目标文件是由add_executable()或add_library()创建的
target_sources(<target>
<INTERFACE|PUBLIC|PRIVATE> [items1...]
[<INTERFACE|PUBLIC|PRIVATE> [items2...] ...])
target_link_libraries
该指令的作用为将目标文件与库文件进行链接
target_link_libraries(<target> [item1] [item2] [...]
[[debug|optimized|general] <item>] ...)
上述指令中的<target>是指通过add_executable()和add_library()指令生成已经创建的目标文件,而[item]表示依赖的库文件
link_directories
添加需要链接的库文件目录
link_directories(directory1 directory2 ...)
它相当于g++命令的-L选项的作用,也相当于环境变量中增加LD_LIBRARY_PATH的路径的作用。
LINK_LIBRARIES
添加需要链接的库文件路径,注意这里是全路径
LINK_LIBRARIES("/opt/MATLAB/R2012a/bin/glnxa64/libeng.so")
LINK_LIBRARIES("/opt/MATLAB/R2012a/bin/glnxa64/libmx.so")
也可以写成:
LINK_LIBRARIES("/opt/MATLAB/R2012a/bin/glnxa64/libeng.so" "/opt/MATLAB/R2012a/bin/glnxa64/libmx.so")
Install
install用于指定在安装时运行的规则。它可以用来安装很多内容,可以包括目标二进制、动态库、静态库以及文件、目录、脚本等:
install(TARGETS <target>... [...]) – 可执行文件,库文件,头文件
install({FILES | PROGRAMS} <file>... [...]) -- FILES为普通的文本文件,PROGRAMS指的是非目标文件的可执行程序(如脚本文件)
install(DIRECTORY <dir>... [...]) – 目录
install(SCRIPT <file> [...]) -- 在安装过程中调用给定的CMake脚本文件(即.cmake脚本文件)
install(CODE <code> [...]) -- 在安装过程中调用给定的CMake代码
install(EXPORT <export-name> [...])
有时候,也会用到一个非常有用的变量CMAKE_INSTALL_PREFIX,用于指定cmake install时的相对地址前缀。
add_subdirectory
添加一个子目录并构建该子目录。
add_subdirectory (source_dir [binary_dir] [EXCLUDE_FROM_ALL])
source_dir必选参数。该参数指定一个子目录,子目录下应该包含CMakeLists.txt文件和代码文件。子目录可以是相对路径也可以是绝对路径,如果是相对路径,则是相对当前目录的一个相对路径。