Skip to content

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流程)

  1. 预编译(-E参数 宏替换等)
  2. 编译 gcc/msvc/clang (-S参数)
  3. 汇编 (-C参数 Linux生成.o文件、Windows生成.obj文件)
  4. 链接 (将多个二进制文件链接生成一个可执行的文件

CMake构建流程

  1. 编写CMakeLists.txt文件,下面是最基本的配置
    • cmake_minimum_required(VERSION 3.20.0):配置CMake的最小版本
    • project(test):配置项目名称
    • add_executable(test test.cpp):配置生成和可执行程序名称和依赖的源文件
  2. cmake -B build配置、构建项目
  3. 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了