引用说明: 参考这篇博客

Cmake入门

什么是Cmake?

跨平台构建工具:用于生成不同平台(如 Linux/Makefile、Windows/Visual Studio、macOS/Xcode)的构建文件。
元构建系统:不直接编译代码,而是生成其他构建工具(如 Make、Ninja)所需的配置文件。
核心优势:通过编写 CMakeLists.txt 文件描述项目结构,避免手动维护不同平台的构建脚本。

安装Cmake

Ubuntu: sudo apt install cmake

工程目录结构

plaintext
1
2
3
4
5
6
7
8
tree
.
├── bin
├── build
├── data
├── include
├── lib
└── src

Tips: 将CMakeLists.txt放在build文件夹里更整洁

语言格式

注释

行注释: #
块注释: #[[]]

基础项目

plaintext
1
2
3
cmake_minimum_required(VERSION 3.0) # 指定Cmake版本
project(CALC) # 工程名字
add_executable(app add.c div.c main.c mult.c sub.c) # 用c文件生成app的可执行文件

定义变量

SET(var val1 val2 val3)

  • 一个特殊变量CAMKE_CXX_STANDARD是c++标准SET CMAKE_CXX_STANDARD 17 等同于-std=c++17

Tips: ${var}来使用变量

Thoughts: HOME变量自定义在project根目录(绝对目录)下

文件搜索

file(GLOB dir var)

Tips: file(GLOB ${HOME}/include/*.h HEAD_FILE)

头文件

include_directories(headpath)

制作自己的库文件

  • add_library(库名称 STATIC 源文件1 [源文件2] ...)
  • add_library(库名称 SHARED 源文件1 [源文件2] ...)

库目录(让编译器知道引用了什么库文件)

静态库
  • link_libraries(<static lib> [<static lib>...])适用于第三方库 --> 输入库名称
  • link_directories(<lib path>)适用于自带系统库 -->输入库路径
动态库

target_link_libraries(可执行文件 库名称

Tips: 库的名称掐头(lib)去尾(.a,.so…)

总结

cmake
1
2
3
4
5
6
7
8
9
10
11
12
13
cmake_mininum_required(VERSION 3.0) #最低版本
project(name) #工程名字
SET(SRC_LIST 1.cpp 2.cpp 3.cpp) #定义变量
SET(CMAKE_CXX_STANDARD 17) # c++标准
SET(HOME ~/Code)
SET(EXCUATABLE_OUTPUT_PATH ${HOME}/bin) #输出文件路径
SET(LIBRARY_OUTPUT_PATH ${HOME/lib}) #输出库文件路径
file(GLOB SRC_LIST ${HOME}/bin/*.cpp) #搜索全部cpp文件,存储到SRC_LIST
include_directories(${HOME}/include) #指定头文件搜索目录
add_executable(program.exe ${SRC_LIST}) #空格或;间隔
add_library(库名称 STATIC/SHARED 源文件) #制作库文件
message(STATUS "message ${HOME}") #WARNING,SEND_ERROR,FATAL_ERROR(中断)
add_definition(-D宏名称) #自定义宏名称