CMake

"How to use CMake"

Posted by Hzy on September 13, 2025

cpp 文件处理流 pre->compile->汇编->link->excute

编写简单的CMakeLists.txt

1
2
3
4
5
注释:使用“#”
cmake_mininum_required: #指定最小c++版本
project(<PROJECT-NAME> VERSION  DESCRIPTION HOMEPAGE_URL LANGUAGES)
add_executable(可执行程序 源文件名字)#源文件可空格可分号分开
cmake CMakeLists.txt所在目录

我们在CmakeLists.txt所在目录下面执行cmake后,会生成一堆文件:
CMakeCache.txt CMakeFiles Makefile cmake_install.cmake
之后需要使用make,而make作用的是Makefile文件,也就是说,使用make的时候一定要记得自己在哪个目录下面

SET命令的使用

1
2
3
4
5
6
7
8
9
10
11
12
13
#1.set自定义变量
set(var [VALUE])
${var}  #取值
set(SRC_List add.c;main.c)
add_executable(app ${SRC_List})
#2.set给宏设置值,下面两种写法等价
set(CMAKE_CXX_STANDARD 14)
cmake CMakeLists.txt文件路径 -DCMAKE_CXX_STANDARD=14
#3.set给另外宏设置
set(${EXECUTABLE_OUTPUT_PATH} ${HOME}/bin) 
 #若目录不存在,cmake会帮我们创建出来
#4.合并变量
set(a a;b)把a和b都合并到变量a里面 

cmake 之前要保证上次cmake生成的文件已经被清理删除

文件搜索

1
2
3
aux_source_directory(dir var)
file(GLOB/GLOB_RECURSE var 文件类型*.cpp)
#file可以选择递归,参数多  aux不能递归搜寻,参数少

宏定义

1
2
3
CMAKE_CURRENT_SOURCE_DIR
PROJECT_SOURCE_DIR ### 源文件
include_directories()

制作静态库或者动态库

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#动态库win  lib__name__.dll
#动态库linux    lib__name__.so
#静态库win  lib__name__.lib
#静态库linux  lib__name__.a
#去掉不需要的文件
add_library(库名称 STATIC/SHARED 源文件)
set(LIBRARY_OUTPUT_PATH /output)
#其实对于动态库,它也可执行,所以可以使用 ### 链接库
#链接静态库(静态库会被加载到内存)
link_libraries(<static libname>) 
#指定自定义库路径(如果是系统的,那就不用写了)
link_directories(<lib path>)
#链接动态库(物理内存共享)
target_link_libraries(<target> PRIVATE/PUBLIC/INTERFACE <item>)
#只有public库引用库才能传递,上面这条写到最后(因为link靠后) ### message日志  
message(消息重要程度 "消息")
(无) :重要消息
STATUS:非重要消息
WARNING:CMake警告
SEND_ERROR: 一般错误,跳过此步骤
FATAL_ERROR:致命错误,直接g,终止所有处理过程