问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

CMake完整构建流程详解

创作时间:
作者:
@小白创作中心

CMake完整构建流程详解

引用
CSDN
1.
https://m.blog.csdn.net/m0_67656158/article/details/143837582

CMake是一个跨平台的构建系统生成器,广泛应用于C/C++项目的构建和管理。本文将详细介绍CMake的完整构建流程,包括创建构建目录、生成构建文件、编译和构建、清理构建文件以及重新配置和构建等关键步骤。通过一个具体的C++项目示例,帮助读者掌握CMake的基本使用方法。

本文是CMake系列的实战课程,主要讲解如何在项目中使用CMake来构建项目。在阅读本文前可以先看看另外两篇文章,来保证对CMake的了解:

CMake的构建流程分为几个主要步骤,从设置项目到生成和执行构建命令。

1. 创建构建目录

CMake推荐使用"Out-of-source"构建方式,即将构建文件放在源代码目录之外的独立目录中。这样可以保持源代码目录的整洁,并方便管理不同的构建配置。

创建构建目录:在项目的根目录下,创建一个新的构建目录。例如,可以创建一个名为build的目录。

mkdir build

进入构建目录:进入刚刚创建的构建目录。

cd build

2. 使用CMake生成构建文件

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

运行CMake配置:在构建目录中运行CMake命令,指定源代码目录。源代码目录是包含CMakeLists.txt文件的目录。

cmake ..

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

cmake -G "Ninja" ..

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

cmake -DCMAKE_BUILD_TYPE=Release ..

检查配置结果:CMake会输出配置过程中的详细信息,包括找到的库、定义的选项等,如果没有错误,构建系统文件将被生成到构建目录中。

3. 编译和构建

使用生成的构建文件进行编译和构建。不同的构建系统使用不同的命令。

使用Makefile(或类似构建系统):如果使用Makefile,可以运行make命令来编译和构建项目。

make

如果要构建特定的目标,可以指定目标名称。例如:

make MyExecutable

使用Ninja:如果使用Ninja构建系统,运行ninja命令来编译和构建项目。

ninja

与make类似,可以构建特定的目标:

ninja MyExecutable

使用Visual Studio:如果生成了Visual Studio工程文件,可以打开.sln文件,然后在Visual Studio中选择构建解决方案。也可以使用msbuild命令行工具来编译:

msbuild MyProject.sln /p:Configuration=Release

4. 清理构建文件

构建过程中生成的中间文件和目标文件可以通过清理操作删除。

使用Makefile:运行make clean命令(如果定义了清理规则)来删除生成的文件。

make clean

使用Ninja:运行ninja clean命令(如果定义了清理规则)来删除生成的文件。

ninja clean

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

rm -rf build/*

5. 重新配置和构建

如果修改了CMakeLists.txt文件或项目设置,可能需要重新配置和构建项目。

重新运行CMake配置:在构建目录中重新运行CMake配置命令。

cmake ..

重新编译:使用构建命令重新编译项目。

make

CMake构建示例

假设我们有一个简单的C++项目,包含一个主程序文件和一个库文件,我们将使用CMake构建这个项目。我们的项目结构如下:

MyProject/
├── CMakeLists.txt
├── src/
│   ├── main.cpp
│   └── mylib.cpp
└── include/
    └── mylib.h
  • main.cpp:主程序源文件。
  • mylib.cpp:库源文件。
  • mylib.h:库头文件。
  • CMakeLists.txt:CMake配置文件。

3.1 创建CMakeLists.txt文件

在MyProject目录下创建CMakeLists.txt文件。CMakeLists.txt文件用于配置CMake项目。

CMakeLists.txt文件内容:

cmake_minimum_required(VERSION 3.10)   # 指定最低CMake版本
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)
# 添加源文件
add_library(MyLib src/mylib.cpp)       # 创建一个库目标MyLib
add_executable(MyExecutable src/main.cpp)  # 创建一个可执行文件目标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可执行文件。

3.2 创建构建目录

为了保持源代码目录的整洁,我们将在项目根目录下创建一个单独的构建目录。

创建构建目录

打开终端,进入MyProject目录,然后创建构建目录:

mkdir build
cd build

3.3 配置项目

在构建目录中使用CMake配置项目。这将生成适合平台的构建系统文件(如Makefile)。

运行CMake配置

在构建目录中运行CMake配置命令:

cmake ..
  • cmake ..:..指向源代码目录,即包含CMakeLists.txt文件的目录。CMake将读取CMakeLists.txt文件并生成构建系统文件。

3.4 编译项目

使用生成的构建系统文件编译项目。根据生成的构建系统文件类型,使用相应的构建命令。

使用Makefile

如果生成了Makefile(在大多数类Unix系统中默认生成),可以使用make命令进行编译:

make
  • make:编译项目并生成可执行文件MyExecutable。

3.5 运行可执行文件

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

运行可执行文件

在构建目录中,运行MyExecutable:

./MyExecutable

3.6 清理构建文件

清理构建文件以删除生成的中间文件和目标文件。

使用make clean

如果在CMakeLists.txt中定义了清理规则,可以使用make clean命令:

make clean
  • make clean:删除中间文件和目标文件。

手动删除

如果没有定义清理规则,可以手动删除构建目录中的所有文件:

rm -rf build/*

总结

本文详细介绍了CMake的完整构建流程,包括创建构建目录、生成构建文件、编译和构建、清理构建文件以及重新配置和构建等关键步骤。通过一个具体的C++项目示例,帮助读者掌握CMake的基本使用方法。希望本文能帮助读者更好地理解和使用CMake。

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号