本文创建于 2024-12-07;修改于 2024-12-07

一、CMake概述

CMake是一个跨平合的安装(编译)工具,可以用简单的语句采描述所有平合的安装(编译过程)。他能够输出各种各样的makefile或者project文件,能测试编译器所支持的C++特性,类似UNIX下的automake。只是CMake 的组态档取名为CMakeLists.txt。Cmake 并不直接建构出最终的软件,而是产生标准的建构档(如Unix 的 Makefile 或 Windows Visual C++ 的 projects/workspaces),然后再依一般的建构方式使用。

二、CMake使用

1. 注释

# 你好呀,我是单行注释,使用 # 即可

#[[
你好呀,我是多行注释,注意我的格式哦~
]]

2. 如何在 CMakeLists.txt 文件中添加的三个命令

cmake_minimum_required 指定使用的cmake工具的最低版本;

project 定义工程名,也可以指定工程的版本、描述、web网页地址、支持的语言;

add_executable 定义工程会生成一个可执行程序;

cmake_minimum_required(VERSION 3.15)
project(test)
add_excutable(app a.cpp b.cpp c.cpp)

2.1 定义变量

# 格式 set(variable value1;value2;value3;...)

# 源文件之间可以使用空格进行分割
set(SRC_LIST a.cpp b.cpp c.app)

# 源文件之间也可以使用分号进行分割
set(SRC_LIST a.cpp;b.cpp;c.cpp)

# 此时的 add_excutable 命令如下
add_excutable(app ${SRC_LIST})

2.2 指定编译时所使用的C++标准

  • 在 CMakeLists.txt 中指定
# 使用 C++11 标准进行编译
set(CMAKE_CXX_STANDARD 11)

# 使用 C++14 标准进行编译
set(CMAKE_CXX_STANDARD 14)

...
  • 执行 cmake 命令时指出
# 增加 -std=c++11
cmake CMakeLists.txt -DCMAKE_CXX_STANDARD=11

...

2.3 指定输出路径

# 定义变量用于存储项目绝对路径
set(HOME /home/usernmae/project_test)
# 将拼接后的路径传给 EXECUTABLE_OUTPUT_PATH 宏,如果目录不存在会自动创建
set(EXECUTABLE_OUTPUT_PATH ${HOME}/bin)

3. 搜索文件

PROJECT_SOURCE_DIR宏对应的值就是在执行cmake命令时,后面紧跟的目录,一般是工程的根目录。

CMAKE_CURRENT_SOURCE_DIR 宏表示当前访问的 CMakeLists.txt 文件所在的路径;

3.1 aux_source_directory 命令

# PROJECT_SOURCE_DIR 宏表示搜索路径是 cmake 后面所写的 CMakeLists.txt 的路径,并将所搜结果赋值给 SRC 变量
aux_source_directory(${PROJECT_SOURCE_DIR} SRC)

3.2 file 命令

file(GLOB/GLOB_RECURSE 变量名 要搜索的文件路径和文件类型)
  • GLOB: 将指定目录下搜索到的满足条件的所有文件名生成一个列表,并将其存储到变量中。

  • GLOB_RECURSE:递归搜索指定目录,将搜索到的满足条件的文件名生成一个列表,并将其存储到变量中。

3.3 包含头文件

在CMake中设置要包含的目录也很简单,通过 include_directories命令即可:

include_directories(headfile_path)