/images/avatar.png

CMake模块

模块是预先写好的CMake代码,通常放在一个目录中作为CMake发布的一部分。include命令可以将模块代码引入到当前作用域,语法如下:

include(module [OPTIONAL] [RESULT_VARIABLE myVar] [NO_POLICY_SCOPE])

CMake首先在变量CMAKE_MODULE_PATH定义的目录列表中按顺序搜索每个目录来查找模块文件,第一个匹配的文件将被使用。如果没有找到匹配的文件,CMake将在它自己的内部模块目录中搜索。一个常见的做法是将自己写的模块加到CMAKE_MODULE_PATH变量中,然后使用模块代码:

CMake生成器表达式

生成器表达式不在配置阶段计算,而是推迟到生成阶段,当项目文件被写入时再进行计算。它可以用来执行条件逻辑,输出字符串,提供有关构建的各个方面的信息。

CMake属性

属性几乎影响着构建过程的所有方面,它附属于一个特定的实体,无论是目录、目标、源文件、测试用例、缓存变量甚至是整个构建过程本身。属性并不像变量那样持有一个独立的值,而是为它所连接的实体提供特定的信息。CMake用于相关属性和变量的名称通常遵循相同的模式:变量名称=CMAKE_属性名称。

CMake函数和宏

基础知识

CMake的函数和宏与C语言的函数和宏特性相似。函数引入了一个新的作用域,函数参数是函数体内可访问的变量。宏主体在宏调用的地方展开,宏参数只是做简单的字符串替换。一个CMake函数或宏的定义如下:

CMake子目录

CMake提供两个命令add_subdirectory和include,将另一个文件或目录中的内容包含到构建中,允许构建逻辑分布在目录层次中,而不是所有东西都在最顶层定义。优点如下: