CMake备忘
本文创建于
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)