【第四节】CMake 实践举例

前言

        CMake 是一个强大的跨平台构建工具,能够帮助开发者高效管理 C++ 项目的构建过程。本文将通过一个简单的 C++ 项目实例,详细介绍如何使用 CMake 进行项目配置、编译和构建。

一、 项目结构

        假设我们有一个简单的 C++ 项目,结构如下:

MyProject/
├── CMakeLists.txt
├── src/
│   ├── main.cpp
│   └── mylib.cpp
└── include/
    └── mylib.h

- **main.cpp**:主程序源文件。
- **mylib.cpp**:库源文件。
- **mylib.h**:库头文件。
- **CMakeLists.txt**:CMake 配置文件。

二、 创建 CMakeLists.txt 文件

        `CMakeLists.txt` 是 CMake 的核心配置文件,用于定义项目、目标和依赖关系。以下是一个典型的 `CMakeLists.txt` 文件内容:

# 指定最低 CMake 版本
cmake_minimum_required(VERSION 3.10)

# 定义项目名称和版本
project(MyProject VERSION 1.0)

# 设置 C++ 标准为 C++11
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

# 添加头文件搜索路径
include_directories(${PROJECT_SOURCE_DIR}/include)

# 创建一个库目标 MyLib
add_library(MyLib src/mylib.cpp)

# 创建一个可执行文件目标 MyExecutable
add_executable(MyExecutable src/main.cpp)

# 将 MyLib 库链接到 MyExecutable 可执行文件
target_link_libraries(MyExecutable MyLib)

配置说明:
- **cmake_minimum_required(VERSION 3.10)**:指定 CMake 的最低版本为 3.10。
- **project(MyProject VERSION 1.0)**:定义项目名称为 `MyProject`,版本为 `1.0`。
- **set(CMAKE_CXX_STANDARD 11)**:指定 C++ 标准为 C++11。
- **include_directories(${PROJECT_SOURCE_DIR}/include)**:指定头文件目录。
- **add_library(MyLib src/mylib.cpp)**:创建一个名为 `MyLib` 的库,源文件是 `mylib.cpp`。
- **add_executable(MyExecutable src/main.cpp)**:创建一个名为 `MyExecutable` 的可执行文件,源文件是 `main.cpp`。
- **target_link_libraries(MyExecutable MyLib)**:将 `MyLib` 库链接到 `MyExecutable` 可执行文件。

三、创建构建目录

        为了保持源代码目录的整洁,CMake 推荐使用 **"Out-of-source" 构建方式**,即将构建文件存放在独立的目录中。

操作步骤:
(1)在项目根目录下创建一个名为 `build` 的目录:

mkdir build


(2)进入构建目录:

cd build

四、配置项目

在构建目录中运行 CMake,生成适合当前平台的构建系统文件(如 Makefile、Ninja 文件等)。

操作步骤:
(1)运行 CMake 配置命令,指定源代码目录(即包含 `CMakeLists.txt` 文件的目录):

cmake ..


(2)如果需要指定生成器(如 Ninja 或 Visual Studio),可以使用 `-G` 选项。例如:

cmake -G "Ninja" ..


(3)如果需要指定构建类型(如 Debug 或 Release),可以使用 `-DCMAKE_BUILD_TYPE` 选项。例如:

cmake -DCMAKE_BUILD_TYPE=Release ..

五、 编译项目

        生成构建文件后,可以使用相应的构建工具进行编译。

使用 Makefile:
(1)运行 `make` 命令编译项目:

make


(2)如果需要构建特定的目标(如可执行文件),可以指定目标名称:

make MyExecutable

使用 Ninja:
(1)运行 `ninja` 命令编译项目:

ninja


(2)如果需要构建特定的目标,可以指定目标名称:

ninja MyExecutable

六、运行可执行文件

        编译完成后,可以运行生成的可执行文件。

操作步骤:
1. 在构建目录中,运行生成的可执行文件:

./MyExecutable

七、清理构建文件

        在构建过程中会生成大量的中间文件和目标文件。为了释放磁盘空间或重新构建项目,可以清理这些文件。

使用 Makefile:
运行 `make clean` 命令(如果定义了清理规则):

make clean

使用 Ninja:
运行 `ninja clean` 命令(如果定义了清理规则):

ninja clean

手动删除:
可以直接删除构建目录中的所有文件,但保留源代码目录不变。例如:

rm -rf build/*

八、总结

        通过以上步骤,我们完成了一个简单 C++ 项目的 CMake 构建过程。CMake 的强大之处在于其跨平台性和灵活性,能够适应不同的构建需求。以下是关键步骤的总结:
        1. **创建 CMakeLists.txt 文件**:定义项目、目标和依赖关系。
        2. **创建构建目录**:保持源代码目录整洁。
        3. **配置项目**:生成适合平台的构建系统文件。
        4. **编译项目**:使用生成的构建文件进行编译。
        5. **运行可执行文件**:验证构建结果。
        6. **清理构建文件**:删除不必要的中间文件和目标文件。

        掌握 CMake 的使用,不仅可以提高开发效率,还能更好地管理复杂的项目结构。

你可能感兴趣的:(CMake的入门与实践,c++,c语言)