CMake 入门笔记

一、CMake 是什么?

CMake 是一个跨平台的构建工具,用来告诉编译器怎么编译你的代码。

类比 说明
你写的代码 原材料(砖头、水泥)
CMake 施工图纸(告诉工人怎么盖)
编译器(g++/cl.exe) 工人(按图纸施工)
可执行文件 盖好的房子

二、为什么需要 CMake?

不同平台的编译方式不同:

平台 编译方式
Linux Makefile
Windows Visual Studio 项目文件
Mac Xcode 项目文件

CMake 帮你自动生成这些平台对应的编译文件,不用你手写。

三、CMake 常用命令

1. 版本和项目

cpp 复制代码
cmake_minimum_required(VERSION 3.0)  # 要求 CMake 最低版本
project(MyProject)                   # 项目名称

2. 设置 C++ 标准

cpp 复制代码
set(CMAKE_CXX_STANDARD 17)           # 使用 C++17 标准

3. 指定可执行文件输出目录

cpp 复制代码
set(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/bin)
  • EXECUTABLE_OUTPUT_PATH:系统变量,设置可执行文件的输出路径

  • ${PROJECT_SOURCE_DIR}:当前工程的绝对路径

4. 指定头文件目录

cpp 复制代码
include_directories(${PROJECT_SOURCE_DIR}/include)

告诉编译器去哪里找 .h.hpp 头文件。

5. 收集源文件

cpp 复制代码
aux_source_directory(${PROJECT_SOURCE_DIR}/src SRC_LIST)
  • src 目录下所有源文件(.cpp)收集到变量 SRC_LIST

  • 避免手动一个一个添加

6. 添加子目录

cpp 复制代码
add_subdirectory(exmp)

编译子目录 exmp,该目录下也需要有自己的 CMakeLists.txt

7. 生成可执行文件

cpp 复制代码
add_executable(myapp main.cpp)       # 单个源文件
add_executable(myapp ${SRC_LIST})    # 多个源文件(使用变量)

8. 链接库

cpp 复制代码
target_link_libraries(myapp pthread) # 链接 pthread 库

四、完整示例

目录结构

cpp 复制代码
MyProject/
├── CMakeLists.txt
├── include/
│   └── mylib.h
├── src/
│   ├── main.cpp
│   └── mylib.cpp
└── bin/                    # 编译后生成的可执行文件放这里

顶层 CMakeLists.txt

cpp 复制代码
cmake_minimum_required(VERSION 3.0)
project(MyProject)

set(CMAKE_CXX_STANDARD 17)

# 可执行文件输出到 bin 目录
set(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/bin)

# 头文件目录
include_directories(${PROJECT_SOURCE_DIR}/include)

# 收集源文件
aux_source_directory(${PROJECT_SOURCE_DIR}/src SRC_LIST)

# 生成可执行文件
add_executable(myapp ${SRC_LIST})

编译步骤

bash 复制代码
# 1. 创建 build 目录(推荐在外部编译)
mkdir build && cd build

# 2. 生成 Makefile
cmake ..

# 3. 编译
make

# 4. 运行
./../bin/myapp

五、CMake 变量说明

变量 含义
${PROJECT_SOURCE_DIR} 项目根目录(包含顶层 CMakeLists.txt 的目录)
${PROJECT_BINARY_DIR} 编译目录(运行 cmake 的目录)
${EXECUTABLE_OUTPUT_PATH} 可执行文件输出路径
${LIBRARY_OUTPUT_PATH} 库文件输出路径

六、常用命令速查

命令 作用
cmake_minimum_required(VERSION x.x) 指定 CMake 最低版本
project(名称) 设置项目名称
set(变量名 值) 设置变量
add_executable(名称 源文件) 生成可执行文件
add_library(名称 源文件) 生成库文件
include_directories(路径) 添加头文件搜索路径
aux_source_directory(路径 变量) 收集目录下所有源文件
add_subdirectory(路径) 添加子目录
target_link_libraries(目标 库名) 链接库

七、一句话总结

CMake 是跨平台的编译配置工具。常用命令:project 设置项目名,add_executable 生成可执行文件,include_directories 指定头文件路径,aux_source_directory 收集源文件。

相关推荐
zhangrelay4 小时前
蓝桥云课一分钟-星界战纪-Stellar Combat-make
笔记·学习
楼田莉子4 小时前
设计模式:创建型设计模式简介
服务器·开发语言·c++·设计模式
cui_win4 小时前
Ollama 实战笔记:本地大模型安装配置全教程
笔记·ollama
啦啦啦!4 小时前
c++AI大模型接入SDK项目
开发语言·数据结构·c++·人工智能·算法
淬炼之火4 小时前
笔记:对MoE混合专家模型的学习和思考
人工智能·笔记·学习·语言模型·自然语言处理
鸟电波4 小时前
硬件笔记——Allegro绘制PCB(未完待续)
笔记·嵌入式硬件·智能硬件
中屹指纹浏览器4 小时前
2026分布式多账号运维体系中指纹浏览器的架构设计与工程落地
经验分享·笔记
cmpxr_4 小时前
【C】隐式类型转换
c语言·c++·算法
布局呆星4 小时前
Vue3+TS 笔记:Props 与 Emits 的正确打开方式
javascript·vue.js·笔记