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 收集源文件。

相关推荐
插件开发10 小时前
CUDA11-VS2015安装-工具链测试-Helloworld程序
c++·gpu·cuda
攻城狮Soar10 小时前
STL源码解析之deque
开发语言·c++
数智工坊10 小时前
周志华《Machine Learning》学习笔记--第十五章--规则学习
笔记·学习·机器学习
萤萤七悬11 小时前
【Python笔记】AI帮封装Airtest IOS-WDA touch操作时的factor坐标转换
笔记·python·ios
一口吃俩胖子11 小时前
【脉宽调制DCDC功率变换学习笔记024】电压反馈补偿和环路增益
笔记·学习·算法
Rabitebla12 小时前
C++ 多态详解:从概念到虚表底层原理(代码轰炸)
开发语言·c++
charlie11451419112 小时前
通用GUI编程技术——图形渲染实战(五十)——命中测试与鼠标事件路由:精确交互
c++·windows·架构·交互·图形渲染
San813_LDD12 小时前
[深度学习]量化研究_ML_Lesson3
笔记
hetao173383712 小时前
2026-05-25~06-11 hetao1733837 的刷题记录
c++·算法
洛水水12 小时前
【力扣100题】82.有效的括号
c++·算法·leetcode