前言
CMake 是一个跨平台的构建系统,被用于自动生成各种操作系统和编译器的构建文件。作为 C++ 开发人员,掌握 CMake 是必不可少的。它具有以下特点:
- 跨平台构建:CMake 支持 Windows、Linux、macOS 等多种操作系统。使用 CMake,你可以轻松地为不同平台生成构建文件,提高项目的可移植性。
- 编译器和构建工具的独立性:CMake 可以生成适用于不同编译器和构建工具的项目文件,例如 Visual Studio、Xcode、Makefile 等。这意味着你的项目可以在多种开发环境中使用,无需为每个环境编写特定的构建脚本。
- 简化构建过程:CMake 可以帮助你管理复杂项目的构建过程。它自动检测依赖关系、生成目标文件、编译静态库和动态库等。通过 CMake 配置文件(CMakeLists.txt),你可以灵活地控制整个构建过程,减轻手动管理的负担。
- 便于协作开发:使用 CMake 标准化项目的构建方式,有利于多人协作开发。团队成员只需遵循 CMakeLists.txt 的规则,即可轻松地构建和运行项目。
- 开源生态系统:CMake 是一个开源项目,有庞大的社区支持。许多开源库已经采用 CMake 作为构建系统,学习 CMake 可以更方便地集成和使用这些库。
本文我们一起来了解一下 CMake 的简单使用方式。
正文
这里以使用 CMake 构建一个简单的C++程序为例,带大家来认识 CMake 的简单使用方法。
创建源文件
我们首先在工作目录下创建一个简单的名为main.cpp
的源文件,这个程序的效果是打印Hello CMake
。
// main.cc
#include <iostream>
int main()
{
std::cout << "Hello CMake!" << std::endl;
return 0;
}
编写 CMakeLists.txt
文件
在目录下创建一个名为 CMakeLists.txt
的文件,并编写文件内容用于构建Hello CMake
程序。
# 选择CMake的最低版本
cmake_minimum_required(VERSION 3.0)
# 项目名称
project(hello_cmake)
# 添加可执行文件
add_executable(hello_cmake main.cc)
在这个文件中,我们指定了项目的最低 CMake 版本、项目名称和版本,然后添加了一个可执行文件 hello_cmake
,它包含了我们的 main.cpp
源文件。除此之外,这里继续介绍一些常用的CMake命令:
project()
: 定义项目名称和版本。cmake_minimum_required()
: 指定 CMake 的最低版本要求。add_executable()
: 生成可执行文件。add_compile_options()
:添加编译选项,如-std=c++11、-lpthread等。set():
用于设置变量的值。它可以用来定义变量,并且可以是普通的源文件、列表、布尔值等。add_library()
: 生成库文件。target_link_libraries()
: 链接库文件。include_directories()
: 添加头文件目录。find_package()
: 寻找并加载外部库。install()
: 定义安装规则。
我们可以使用这些命令编写CMakeLists.txt
文件,以此来达到我们想要的项目构建效果。
使用CMake构建项目
现在我们完成了源文件以及CMakeLists.txt
的编写,然后我们打开终端并进入项目目录,执行以下命令:
#cmake CMakeLists.txt所在的目录
cmake . # 生成标准的构建文件,我们在Linux环境下就是Makefile
make # 使用构建出的Makefile编译中间文件,生成可执行文件
./hello_cmake # 运行可执行文件
#运行结果: Hello CMake!
于是我们就使用CMake编译并生成了一个C++程序。
创建build目录(小技巧)
当我们使用CMake进行上述的项目构建时,我们发现CMake在工作目录下生成了许多中间文件:
这些文件与源文件混合起来,看上去会有一些不美观。那么为了保持项目目录的整洁,你可以在项目文件夹中创建一个名为 build
的目录,用于保存生成的中间文件和可执行文件。这样,你只需在 build
目录中运行 cmake .. && make
命令,就可以生成可执行文件:
build文件夹:
项目文件夹:
于是我们就将CMake使用过程中产生的中间文件以及可执行文件放在了build
目录中。
结语
以上就是本文的主要内容,结合上述内容我们就可以使用CMake进行一些常规的项目构建操作。