从零开始系统学习 CMake(超详细 + 逐行讲解 + 可直接运行)
我会用你最熟悉的项目结构,从最基础到进阶,一步步带你系统掌握 CMake。
全程不跳步、不晦涩、全部可实操。
一、先固定你的项目结构(全程用这个)
MyProject/ # 项目根目录
├── include/ # 头文件 .h / .hpp
│ └── Math.h
├── src/ # 实现文件 .cpp
│ └── Math.cpp
├── main.cpp # 主程序
└── CMakeLists.txt # CMake 配置文件(核心)
二、CMake 到底是什么?(一句话)
CMake 不是编译器,是「构建工具生成器」
你写 CMakeLists.txt → CMake 自动生成 Makefile → 执行 make 编译。
优点:
- 跨平台(Windows/Linux/Mac 通用)
- 自动找库、自动找头文件
- 大型项目必备
三、CMake 基础入门(第 1 版 CMakeLists.txt)
目标:编译 main.cpp + src + include
# 1. 指定 CMake 最低版本
cmake_minimum_required(VERSION 3.10)
# 2. 定义项目名称
project(MyMathApp)
# 3. 指定 C++ 标准
set(CMAKE_CXX_STANDARD 11)
# 4. 告诉 CMake 头文件在哪里
include_directories(include)
# 5. 指定要编译的源文件
add_executable(myapp
main.cpp
src/Math.cpp
)
逐行解释
cmake_minimum_required:必须写在第一行project(名字):定义项目名,随便起set(CMAKE_CXX_STANDARD 11):用 C++11include_directories(include):关键! 告诉编译器去 include 找头文件add_executable(可执行文件名 源文件列表):最终生成myapp
四、编译运行步骤(固定 4 步,永远不变)
# 1. 创建构建目录(外部构建,不污染源码)
mkdir build
cd build
# 2. 让 CMake 生成 Makefile
cmake ..
# 3. 真正编译
make
# 4. 运行
./myapp
五、CMake 进阶 1:自动搜索源文件(不用手动写)
cmake_minimum_required(VERSION 3.10)
project(MyMathApp)
set(CMAKE_CXX_STANDARD 11)
include_directories(include)
# 自动搜索 src 下所有 .cpp
file(GLOB SRC_FILES src/*.cpp)
# 自动搜索主文件
add_executable(myapp main.cpp ${SRC_FILES})
file(GLOB 变量 路径) 自动匹配文件,适合大型项目。
六、CMake 进阶 2:编译成库(非常重要)
企业项目不会直接编译所有文件,而是先编译成库,再链接库。
步骤 1:生成静态库 .a
add_library(math_lib STATIC src/Math.cpp)
include_directories(include)
步骤 2:主程序链接库
add_executable(myapp main.cpp)
target_link_libraries(myapp math_lib)
完整版
cmake_minimum_required(VERSION 3.10)
project(MyMathApp)
set(CMAKE_CXX_STANDARD 11)
include_directories(include)
# 编译库
add_library(math_lib STATIC src/Math.cpp)
# 编译主程序
add_executable(myapp main.cpp)
# 链接库
target_link_libraries(myapp math_lib)
七、CMake 进阶 3:指定输出路径(可执行文件放 bin)
想让编译后的程序自动放到 bin 目录?
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_SOURCE_DIR}/bin)
加在 CMakeLists.txt 里即可。
八、CMake 进阶 4:添加编译选项(警告、优化)
# 开启所有警告
add_compile_options(-Wall)
# 调试模式
add_compile_options(-g)
# O2 优化
add_compile_options(-O2)
九、CMake 最常用 10 个指令(必须背)
1. cmake_minimum_required # CMake 最低版本
2. project # 项目名
3. set # 设置变量
4. include_directories # 头文件路径
5. file(GLOB) # 自动找源文件
6. add_executable # 生成可执行文件
7. add_library # 生成库
8. target_link_libraries # 链接库
9. add_compile_options # 编译选项
10. aux_source_directory # 自动加载目录下所有源文件
十、完整企业级 CMakeLists.txt(最终版)
cmake_minimum_required(VERSION 3.10)
project(MyProject)
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_SOURCE_DIR}/bin)
add_compile_options(-Wall -g -O2)
include_directories(include)
file(GLOB SRC src/*.cpp)
add_library(my_lib STATIC ${SRC})
add_executable(myapp main.cpp)
target_link_libraries(myapp my_lib)