CMake简介
CMake是一个开源的、跨平台的自动化构建工具,通过CMake我们可以轻松的管理我们的项目。
注意
- CMake并不是包管理工具!
- CMake并不是只支持C/C++!
- 掌握CMake是学习C/C++的必经之路!
优点
- 操作透明而细腻
- 它专注于现代C++现代化,专注于支持C++现代编译器和工具链
- 它真正的跨平台,支持Windows、Linux、MacOS、Cygwin(Linux移植到Windows)等
- 支持生成几乎所有主流IDE的项目
缺点
- 它还在成长
- CMake是一门语言,你需要学习
CMake没有阻碍C++的发展,相反CMake拯救了C++!!!
相比其他语言的构建工具,CMake自然要复杂的多,但这不是CMake的问题。相比其他的编程语言,C/C++更关注底层和构建其他的编程语言,因此CMake面临的问题和其他编程语言是完全不同的!
而且正因为CMake的出现,C++才终于完成了项目跨平台!
C/C++源文件是怎么生成可执行程序的(toolchain流程)
- 预编译(-E参数 宏替换等)
- 编译 gcc/msvc/clang (-S参数)
- 汇编 (-C参数 Linux生成.o文件、Windows生成.obj文件)
- 链接 (将多个二进制文件链接生成一个可执行的文件
CMake构建流程
- 编写CMakeLists.txt文件,下面是最基本的配置
cmake_minimum_required(VERSION 3.20.0)
:配置CMake的最小版本project(test)
:配置项目名称add_executable(test test.cpp)
:配置生成和可执行程序名称和依赖的源文件
cmake -B build
配置、构建项目cmake --build build
生成可执行程序
构建实例
基于以上流程,我们进行测试。准备文件
shell
$ touch test.cpp CMakeLists.txt
$ tree
.
├── CMakeLists.txt # CMake配置文件
└── test.cpp # C++源文件
1 directory, 2 files
cpp
#include <iostream>
int main(int argc, char *argv[]) {
std::cout << "test" << std::endl;
return 0;
}
cmake
# 配置CMake的最小版本
cmake_minimum_required(VERSION 3.20.0)
# 配置项目名称
project(test)
# 配置生成和可执行程序名称和依赖的源文件
add_executable(test test.cpp)
文件准备完成后进行编译
shell
$ cmake -B build
-- The C compiler identification is GNU 12.3.0
-- The CXX compiler identification is GNU 12.3.0
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working C compiler: /usr/bin/cc - skipped
-- Detecting C compile features
-- Detecting C compile features - done
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Check for working CXX compiler: /usr/bin/c++ - skipped
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Configuring done
-- Generating done
-- Build files have been written to: /home/zm/code/cmake/ch01_overview/build
$ cmake --build build
[ 50%] Building CXX object CMakeFiles/test.dir/test.cpp.o
[100%] Linking CXX executable test
[100%] Built target test
$ ./build/test
test
Windows下使用CMake构建项目
Windows下安装CMake
官网下载CMake https://cmake.org/download
Windows下的build system generator
- 默认MSVC(Visual Studio 2022 或者Visual Studio 2019自带)
- 可以安装MinGW(gcc与clang)
CMake参数
cmake
cmake -G <generator-name> -T <toolset-spec> -A <platform-name> <path-to-source>
通过指定-G "MinGW Makefiles"
来指定CMake使用gcc
基于以上情况我们进行测试
Linux下使用CMake构建项目
Linux下安装CMake
sudo apt-get install cmake
- 源码安装
推荐使用源码安装,有时间包管理器安装的版本较低或者会出现一些错误,使用源码安装还可以感受一下C++的编译速度
源码安装的步骤
shell
sudo apt-get install build-essential
wget https://cmake.org/files/v3.28/cmake-3.28.1.tar.gz
tar -zxvf cmake-3.28.1.tar.gz
cd cmake-3.28.1
./configure
make -j4
sudo make install
# 检查是否安装成功
cmake --version
创建项目测试
参考构建实例
设置C++标准
一句话就设置完事儿了
在CMakeLists.txt中添加以下语句
cmake
set(CMAKE_CXX_STANDARD 11)
就将C++标准设置为11了