CMake是一个跨平台的自动化构建系统,它使用一个名为CMakeLists.txt
的文件来描述构建过程,可以生成标准的构建文件,如Unix的Makefile或Windows的工程文件。CMake不直接构建项目,而是生成其他工具的输入,如make、ninja或Visual Studio。下面是一些CMake的关键知识点:
1. 基本概念
- CMakeLists.txt:项目根目录下的文件,用于定义构建过程。
- 变量:用于存储路径、文件名等信息。
- 命令:CMake的指令,如
add_executable
、find_package
等。
2. 常用命令
cmake_minimum_required(VERSION x.y)
:指定项目需要的最低CMake版本。project(ProjectName)
:定义项目名称和语言。add_executable(target_name file1.cpp file2.cpp ...)
:创建一个可执行文件目标。add_library(target_name STATIC|SHARED|MODULE source1.cpp source2.cpp ...)
:创建一个库目标。target_link_libraries(target_name lib1 lib2 ...)
:链接库到目标。find_package(PackageName)
:查找并使用外部库。include_directories(dir1 dir2 ...)
:添加头文件搜索路径。
3. 目标属性
CMake允许为目标设置属性,如包含目录、编译选项等。这些属性可以通过target_include_directories
、target_compile_options
等命令设置。
4. 变量和环境变量
- 变量:通过
set(VAR_NAME "value")
设置,通过${VAR_NAME}
使用。 - 环境变量:通过
$ENV{VAR_NAME}
访问系统环境变量。
5. 控制流
CMake支持条件语句(if
、elseif
、else
)、循环语句(foreach
、while
)等控制流语句,允许根据不同条件执行不同的命令。
6. 函数和宏
- 函数:使用
function
命令定义,可以有参数和返回值。 - 宏:使用
macro
命令定义,类似于函数,但不具有作用域。
7. 导入和导出目标
CMake支持导出和导入构建目标,使得其他项目可以轻松地使用这些目标,而无需重新查找或构建。
8. 生成构建文件
运行cmake
命令时,指定源代码目录和要生成构建文件的目录。例如:
cmake -S . -B build
这将在build
目录下生成构建系统文件(如Makefile或Visual Studio工程文件)。
9. 构建项目
使用CMake生成的构建系统文件来构建项目。如果是Makefile,可以使用:
cmake --build build
或者直接在build
目录下使用make
命令。
10. 安装和测试
CMake还支持安装(install
命令)和测试(通过CTest,使用enable_testing
和add_test
命令)。
CMake是一个功能强大的构建系统,支持复杂项目的构建管理。通过学习和使用CMake,可以提高项目的可移植性和构建效率。