CMake是一个开源的跨平台构建工具,用于管理C/C++项目的构建过程。它提供了一种用于生成项目构建系统的简化方法,可帮助开发人员跨不同操作系统和编译器工作。


基本语法

CMake使用CMakeLists.txt文件来定义项目的构建规则。每个CMake项目通常包含以下几个部分:

项目名称和最低CMake版本

cmake_minimum_required(VERSION 3.0)
project(MyProject)

这部分指定了项目的名称以及最低所需的CMake版本。

添加可执行文件

add_executable(my_app main.cpp)

使用add_executable命令来指定要构建的可执行文件,并列出源文件。

添加库

add_library(my_library my_source.cpp)

使用add_library命令来创建库,并列出库的源文件。

链接库

target_link_libraries(my_app my_library)

使用target_link_libraries命令将库链接到可执行文件。

设置编译选项

set(CMAKE_CXX_STANDARD 11)

使用set命令来设置编译选项,例如C++标准版本。

安装目标

install(TARGETS my_app DESTINATION bin)

使用install命令来指定如何安装项目的目标文件。


示例CMakeLists.txt文件

下面是一个示例CMakeLists.txt文件,展示了一个简单的C++项目的构建规则:

cmake_minimum_required(VERSION 3.0)
project(MyProject)

# 添加可执行文件
add_executable(my_app main.cpp)

# 设置C++标准版本
set(CMAKE_CXX_STANDARD 11)

# 安装可执行文件到bin目录
install(TARGETS my_app DESTINATION bin)

要使用CMake构建项目,首先需要在项目目录中创建一个CMakeLists.txt文件,然后运行以下命令:

mkdir build
cd build
cmake ..
make

这将在build目录中生成项目的构建系统,并使用make来构建项目。根据你的操作系统和编译器,你也可以使用其他构建工具,如Ninja或Visual Studio。


CMake具有许多内置的常用变量,这些变量用于访问关于你的CMake项目和系统的信息。以下是一些常见的CMake变量及其用途:

  1. CMAKE_SOURCE_DIR:表示CMakeLists.txt文件所在的目录的路径。
  2. CMAKE_BINARY_DIR:表示构建过程中生成的可执行文件和中间文件的存储目录。
  3. CMAKE_CURRENT_SOURCE_DIR:表示正在处理的CMakeLists.txt文件所在的目录的路径。
  4. CMAKE_CURRENT_BINARY_DIR:表示与当前CMakeLists.txt文件相关联的构建目录的路径。
  5. CMAKE_INSTALL_PREFIX:表示安装项目的根目录的路径。
  6. CMAKE_CXX_COMPILER:表示C++编译器的路径。
  7. CMAKE_C_COMPILER:表示C编译器的路径。
  8. CMAKE_BUILD_TYPE:表示构建类型,如Debug、Release等。
  9. CMAKE_MODULE_PATH:指定CMake模块文件的搜索路径。
  10. CMAKE_PREFIX_PATH:指定查找依赖包的路径。
  11. CMAKE_SYSTEM_NAME:表示目标操作系统的名称。
  12. CMAKE_SYSTEM_VERSION:表示目标操作系统的版本。
  13. CMAKE_LIBRARY_OUTPUT_DIRECTORY:表示共享库输出目录的路径。
  14. CMAKE_RUNTIME_OUTPUT_DIRECTORY:表示可执行文件输出目录的路径。
  15. CMAKE_INCLUDE_CURRENT_DIR:控制是否自动包含当前源目录。
  16. CMAKE_FIND_ROOT_PATH:指定在交叉编译环境中查找依赖库的根路径。
  17. CMAKE_VERSION:表示CMake的版本号。