通常在 CMakeLists.txt 文件中,使用最多的是命令。命令的使用方式有点类似于 C 语言中的函数,因为命令后面需要提供一对括号,并且通常需要参数,多个参数使用空格分隔。命令的语法格式如下所示:
command(参数 1 参数 2 参数 3 ...)
make 提 供 了 很 多 命 令 ,参考文档为:https://cmake.org/cmake/help/v3.5/manual/cmake-commands.7.html
一、一些基本的命令
add_executable 可执行程序目标
add_library 库文件目标
add_subdirectory 去指定目录中寻找新的 CMakeLists.txt 文件
aux_source_directory 收集目录中的文件名并赋值给变量
cmake_minimum_required 设置 cmake 的最低版本号要求
get_target_property 获取目标的属性
include_directories 设置所有目标头文件的搜索路径,相当于 gcc 的-I 选项
link_directories 设置所有目标库文件的搜索路径,相当于 gcc 的-L 选项
link_libraries 设置所有目标需要链接的库
list 列表相关的操作
message 用于打印、输出信息
project 设置工程名字
set 设置变量
set_target_properties 设置目标属性
target_include_directories 设置指定目标头文件的搜索路径
target_link_libraries 设置指定目标库文件的搜索路径
target_sources 设置指定目标所需的源文件
二、基本命令介绍
2.1、add_executable
add_executable 命令用于添加一个可执行程序目标,并设置目标所需的源文件,譬如:
#生成可执行文件 hello
add_executable(hello 1.c 2.c 3.c)
定义了一个可执行程序目标 hello,生成该目标文件所需的源文件为 1.c、 2.c 和 3.c。 需要注意的是,源文件路径既可以使用相对路径、也可以使用绝对路径,相对路径被解释为相对于当前源码路径(注意,这里源码指的是 CMakeLists.txt 文件,因为 CMakeLists.txt 被称为 cmake 的源码 )
2.2、add_library
add_library 命令用于添加一个库文件目标,并设置目标所需的源文件,该命令定义如下所示:
dd_library(<name> [STATIC | SHARED | MODULE]
[EXCLUDE_FROM_ALL]
source1 [source2 ...])
第一个参数 name 指定目标的名字, 参数 source1…source2 对应源文件列表; add_library 命令默认生成的库文件是静态库文件,通过 SHARED 选项可使其生成动态库文件,具体的使用方法如下:
#生成静态库文件 libmylib.a
add_library(mylib STATIC 1.c 2.c 3.c)
#生成动态库文件 libmylib.so
add_library(mylib SHARED 1.c 2.c 3.c)
2.3、add_subdirectory
add_subdirectory 命令告诉 cmake 去指定的目录中寻找源码并执行它, 有点像 Makefile 的 include, 其定义如下所示:
add_subdirectory(source_dir [binary_dir] [EXCLUDE_FROM_ALL])
参数 source_dir 指定一个目录, 告诉cmake 去该目录下寻找 CMakeLists.txt文件并执行它;参数binary_dir指定了一个路径,该路径作为子源码(调用 add_subdirectory 命令的源码称为当前源码或父源码,被执行的源码称为子源码)的输出文件(cmake 命令所产生的中间文件) 目录, binary_dir 参数是一个可选参数,如果没有显式指定,则会使用一个默认的输出文件目录
2.4、aux_source_directory
aux_source_directory 命令会查找目录中的所有源文件,其命令定义如下:
aux_source_directory(<dir> <variable>)
从指定的目录中查找所有源文件,并将扫描到的源文件路径信息存放到变量中