1. 介绍
cmake 是用来配置、构建、测试和安装代码的工具,使用cmake可以很好的控制代码编译流程,提高代码移植性,在使用cmake时建议从cmake 3.0.0版本开始使用
2. 安装
通过官网维护的二进制发行版下载,可以下载到最新的cmake版本, 下载地址:
- linux下可以通过apt安装或者上面地址下载的二进制包安装
sudo apt install cmake
- macos 可以通过Homebrew安装
brew install cmake
- windows同样的可以直接下载安装,而且可以选择安装命令行版本或者界面版本
3. 构建项目
- 创建CMakeLists.txt
在项目文件创建cmake文件CMakeLists.txt,然后在文件中编写构建过程
- 构建项目
- 第一种方法
❯Bash
# 先创建构建文件夹 然后将构建和编译的中间文件都生成在该文件夹,防止污染项目目录
make build
cd build
cmake .. # 在build的上级目录有文件 CMakeLists.txt- 第二种方法 (推荐)
❯Bash
# -B 表示构建目录 如果没有会自己创建
# -S 表示构建起始 CMakeLists.txt文件的目录
cmake -B build -S .- 编译项目
❯Bash
# 方法一
# 在build目录执行
make
# 方法二(推荐)
# 在当前目录执行
# --build 参数表示编译项目的文件夹
cmake --build build
# 上述两种编译方法都可以添加更多参数
# -j 10: 使用10个线程编译代码
# -D CMAKE_BUILD_TYPE="Release": 给cmake中的参数CMAKE_BUILD_TYPE设置值为Release- 安装项目
❯Bash
# 方法一
# 在build目录执行
make install
# 方法二(推荐)
# 在当前目录执行
# --build 参数表示编译项目的文件夹
cmake --install build4. 示例
- 在当前目录新建文件夹
mkdir demo && cd demo
- 创建文件
创建文件 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;
}- 创建CMakeLists.txt
❯cmake
cmake_minimum_required(VERSION 3.0) # 设置cmake最低支持版本
project(demo LANGUAGES CXX) # 设置项目名称 并且指定语言(CXX 表示c++, 可选 可以不指定)
add_executable(demo main.cpp) # 指定生成可执行文件 名称为demo 源文件为demo.cpp- 构建项目
在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- 编译项目
在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- 运行项目
生成的项目在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)
- 不要使用全局函数
- 使用小写函数名称
- … …