CMake 是一个跨平台的构建系统生成器,它通过高级的配置文件(CMakeLists.txt
)生成底层构建工具所需的文件(如 Make的Makefile
)。他的主要作用就是组织cpp代码,生成make的Makefile文件用于编译,它支持多平台(Linux、Windows、macOS)和多编译器(GCC、Clang、MinGW)
我们的测试代码是cpp的,下面是我们的目录结构
├─build
│ └─cmake构建的产物
├─include
│ └─test.h
├─src
│ └─test.cpp
├─main.cpp
└─CMakeLists.txt
CMakeLists.txt用来描述我们的构建过程,我们使用cmake命令会根据CMakeLists.txt文件,生成对应的Makefile文件用于编译,要注意的对于不同的系统,cmake会选择不同的编译工具,比如在Windows中默认使用vs,这回生成sln文件没有Makefile文件了,不过我们可以使用-G选项来指定使用什么编译工具
下载安装
我们先来下载cmake,在Windows中需要去CMake官网下载,找到对应的msi文件下载即可,安装过程中一定要勾选上添加到环境变量,不然还需要我们自己添加很麻烦
对于Linux系统很简单sudo apt install cmake
运行这个命令就可以了,如果使用的不是乌班图,换成其他对应的包管理工具即可
CMakeLists.txt文件讲解
下面是我们的CMakeLists.txt
cmake_minimum_required(VERSION 3.31.4)
project(cpp_study)
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
file(GLOB SRC CONFIGURE_DEPENDS src/*.cpp)
add_executable(${PROJECT_NAME} main.cpp ${SRC})
target_include_directories(${PROJECT_NAME} PRIVATE include)
我们来逐行解释这个文件的内容
PROJECT_NAME是项目名称的变量,${}表示使用变量
- cmake_minimum_required(VERSION 3.31.4) 指定cmake的最低版本
- project(cpp_study) 设置我们的项目名称
- set(CMAKE_CXX_STANDARD 11) 设置 C++ 编译器使用的标准为 C++11。
- set(CMAKE_CXX_STANDARD_REQUIRED ON) 强制要求编译器支持 C++11 标准。如果不支持c++11会直接报错
- file 搜索src目录下所有.cpp文件,并将结果存储在变量SRC中。
- add_executable 用于创建可执行文件,这里定义一个名${PROJECT_NAME}的可执行目标,包含main.cpp和SRC中的源文件。
- target_include_directories 为指定可执行文件添加头文件路径,确保编译器能够找到项目中使用的头文件。
这短短几行代码就可以让,我们在不同操作系统不同编译器的环境下编译cpp代码,cmake真的是很强大的一个工具,使用下面的命令就可以构建编译我们的源码了,最后会在build文件夹内生成一个叫做cpp_study的可执行文件
# Windows 需要指定使用MinGW
cmake -G "MinGW Makefiles" -B build
mingw32-make -C build
# Linux/Mac
cmake -B build
make -C build
在运行上面的命令前一定要确保下载好了对应的编译工具链