0%

CMake

💡 TIP

CMake 是一种跨平台的构建工具,用于管理软件项目的构建流程。它通过使用配置文件(CMakeLists.txt)来生成适合特定平台的原生构建系统文件,如 Makefile(Linux)或 Visual Studio 工程文件(Windows)。

CMake 的目标是让开发者在不同的操作系统和编译器之间轻松地构建、测试和打包软件项目。

CMake 简介

CMake 是一种跨平台的构建工具,用于管理软件项目的构建流程。它通过使用配置文件(CMakeLists.txt)来生成适合特定平台的原生构建系统文件,如 Makefile(Linux)或 Visual Studio 工程文件(Windows)。

CMake 的目标是让开发者在不同的操作系统和编译器之间轻松地构建、测试和打包软件项目。


CMake 的主要特点

  1. 跨平台支持:支持 Windows、Linux、macOS,以及嵌入式系统开发。

  2. 生成原生构建文件:通过 CMakeLists.txt,生成适合平台的构建系统文件。

  3. 模块化管理:支持分模块编译和依赖关系管理。

  4. 灵活的配置:支持多种构建选项(如 Debug/Release)。

  5. 集成测试工具:可以通过 CTest 实现测试自动化。

  6. 广泛支持的工具链:支持多种编译器(GCC、Clang、MSVC 等)和工具链(Ninja 等)。


CMake 的基本使用流程

  1. 安装 CMake:在系统中安装 CMake,可通过包管理工具(如 apt、yum、brew)或官网下载安装包。

  2. 创建 CMakeLists.txt:编写一个 CMakeLists.txt 文件,描述项目的构建流程。

  3. 运行 CMake:使用 cmake 命令生成构建系统文件(如 Makefile)。

    1
    cmake -S . -B build
  4. 构建项目:使用生成的构建文件进行编译。

    1
    cmake --build build

一个简单的 CMake 示例

假设有以下项目结构:

1
2
3
project/
├── CMakeLists.txt
├── main.cpp

1. 编写 main.cpp

1
2
3
4
5
6
#include <iostream>

int main() {
std::cout << "Hello, CMake!" << std::endl;
return 0;
}

2. 编写 CMakeLists.txt

1
2
3
4
5
6
7
8
9
10
11
12
# 指定 CMake 的最低版本
cmake_minimum_required(VERSION 3.10)

# 定义项目名称和语言
project(HelloCMake LANGUAGES CXX)

# 设置 C++ 标准
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED True)

# 指定生成的可执行文件
add_executable(hello main.cpp)

3. 构建项目

在项目根目录执行以下命令:

1
2
3
4
5
# 生成构建系统文件
cmake -S . -B build

# 编译项目
cmake --build build

运行生成的可执行文件:

1
./build/hello

CMake 的核心命令

  1. project:定义项目名称及支持的语言。

    1
    project(MyProject LANGUAGES CXX)
  2. add_executable:添加可执行文件。

    1
    add_executable(my_program main.cpp)
  3. add_library:添加库文件。

    1
    add_library(my_library STATIC lib.cpp)
  4. target_include_directories:指定头文件路径。

    1
    target_include_directories(my_program PRIVATE include/)
  5. target_link_libraries:链接库文件。

    1
    target_link_libraries(my_program PRIVATE my_library)

CMake 的优势

  1. 自动化管理依赖关系:轻松管理第三方库和自定义模块。

  2. 适应性强:支持不同编译器和平台。

  3. 模块支持:自带许多模块(如查找库、设置编译选项)


(完)