1. 介绍

cmake 是用来配置、构建、测试和安装代码的工具,使用cmake可以很好的控制代码编译流程,提高代码移植性,在使用cmake时建议从cmake 3.0.0版本开始使用

2. 安装

通过官网维护的二进制发行版下载,可以下载到最新的cmake版本, 下载地址:

https://cmake.org/download/

  1. linux下可以通过apt安装或者上面地址下载的二进制包安装

sudo apt install cmake

  1. macos 可以通过Homebrew安装

brew install cmake

  1. windows同样的可以直接下载安装,而且可以选择安装命令行版本或者界面版本

3. 构建项目

  1. 创建CMakeLists.txt

​ 在项目文件创建cmake文件CMakeLists.txt,然后在文件中编写构建过程

  1. 构建项目
  • 第一种方法
Bash
# 先创建构建文件夹  然后将构建和编译的中间文件都生成在该文件夹,防止污染项目目录
make build
cd build
cmake ..  # 在build的上级目录有文件 CMakeLists.txt
  • 第二种方法 (推荐)
Bash
# -B 表示构建目录 如果没有会自己创建 
# -S 表示构建起始 CMakeLists.txt文件的目录 
cmake -B build -S .
  1. 编译项目
Bash
# 方法一    
# 在build目录执行
make

# 方法二(推荐)
# 在当前目录执行
# --build 参数表示编译项目的文件夹
cmake --build build

# 上述两种编译方法都可以添加更多参数
# -j 10: 使用10个线程编译代码
# -D CMAKE_BUILD_TYPE="Release": 给cmake中的参数CMAKE_BUILD_TYPE设置值为Release
  1. 安装项目
Bash
# 方法一    
# 在build目录执行 
make install 

# 方法二(推荐)    
# 在当前目录执行    
# --build 参数表示编译项目的文件夹 
cmake --install build

4. 示例

  1. 在当前目录新建文件夹

mkdir demo && cd demo

  1. 创建文件

创建文件 main.cpp, 执行touch main.cpp, 在文件中添加下面内容

C++
#include <cstdlib>
#include <iostream>
#include <string>

std::string say_hello() { return std::string("Hello, CMake world!"); }

int main() {
  std::cout << say_hello() << std::endl;
  return EXIT_SUCCESS;
}
  1. 创建CMakeLists.txt
cmake
cmake_minimum_required(VERSION 3.0) # 设置cmake最低支持版本

project(demo LANGUAGES CXX) # 设置项目名称 并且指定语言(CXX 表示c++, 可选 可以不指定)

add_executable(demo main.cpp) # 指定生成可执行文件 名称为demo 源文件为demo.cpp
  1. 构建项目

在demo目录执行cmake -B build -S .

Bash
root@ubuntu:/home/demo# cmake -B build -S .
-- Configuring done
-- Generating done
-- Build files have been written to: /home/demo/build
  1. 编译项目

在demo目录执行cmake --build build

Bash
root@ubuntu:/home/demo# cmake --build build
Scanning dependencies of target demo
[ 50%] Building CXX object CMakeFiles/demo.dir/main.cpp.o
[100%] Linking CXX executable demo
[100%] Built target demo
  1. 运行项目

生成的项目在build目录

Bash
root@ubuntu:/home/demo# tree build/ -L 2
build/
|-- CMakeCache.txt
|-- CMakeFiles
|   |-- 3.16.3
|   |-- CMakeDirectoryInformation.cmake
|   |-- CMakeOutput.log
|   |-- CMakeTmp
|   |-- Makefile.cmake
|   |-- Makefile2
|   |-- TargetDirectories.txt
|   |-- cmake.check_cache
|   |-- demo.dir
|   `-- progress.marks
|-- Makefile
|-- cmake_install.cmake
`-- demo

4 directories, 11 files

执行可执行文件demo

Bash
root@ubuntu:/home/demo/build# ./demo  
Hello, CMake world!

5. 注意事项

有效的现代CMake中指出使用上的一些注意事项可供参考,比如:

  • 不要在项目中使用file(GLOB)
  • 不要使用全局函数
  • 使用小写函数名称
  • … …