CMakeLists.txt 超详细完整详解(零基础到企业级实战)
MyProject:项目名,自动生成变量VERSION:项目版本,自动生成变量:启用 C++ 和 C 语言项目名项目版本项目根目录(源码根路径)编译构建目录CMake 所有自定义配置全部用 set。# 定义单个变量 set(APP_NAME MyApp) # 定义源码文件列表(多文件空格/换行分隔) set(SRCS main.cpp src/test.cpp ) # 定义头文件路径 set(IN
目录
CMakeLists.txt 超详细完整详解(零基础到企业级实战)
1. cmake_minimum_required(版本限制)
9. 宏定义 add_definitions / target_compile_definitions
极简通用 CMakeLists.txt 模板(C++ 基础项目)
CMakeLists.txt 超详细完整详解(零基础到企业级实战)
CMake 是跨平台构建编译工具,用于替代手写 Makefile、VS 工程、Qt .pro 文件。 CMakeLists.txt 是 CMake 的唯一配置文件,控制整个项目的:目录结构、编译方式、宏定义、头文件、库链接、输出路径、跨平台适配。
本文档适配:C/C++ 原生项目、Qt 项目、多模块项目、动态库/静态库/可执行程序、跨平台(Windows/Linux/Mac)。
一、CMake 核心本质(必须先懂)
1. CMake 不编译代码,只生成编译脚本(Makefile、VS工程、Ninja)。
2. 执行流程:CMakeLists.txt → cmake 命令 → 生成构建文件 → make/编译。
3. 语法特点:大小写不敏感、指令+参数、空格分隔、注释 #。
二、文件基础结构(标准完整模板)
一个标准 CMakeLists.txt 固定四件套:
三、逐行指令超详细讲解
1. cmake_minimum_required(版本限制)
作用:声明当前工程需要的最低 CMake 版本,低于该版本会直接报错。
企业常用版本:3.10 / 3.16 / 3.20 / 3.22
2. project(项目定义)
参数详解:
-
MyProject:项目名,自动生成变量
PROJECT_NAME -
VERSION:项目版本,自动生成变量
PROJECT_VERSION -
LANGUAGES CXX C:启用 C++ 和 C 语言
自动生成内置变量:
-
PROJECT_NAME项目名 -
PROJECT_VERSION项目版本 -
PROJECT_SOURCE_DIR项目根目录(源码根路径) -
PROJECT_BINARY_DIR编译构建目录
3. set(定义变量,最常用)
CMake 所有自定义配置全部用 set。
${变量名}:取值语法,CMake 通用取值方式。
4. 编译模式配置(C++标准、编译选项)
5. 头文件路径 include_directories
作用:告诉编译器去哪里找 .h 头文件,相当于 VS/Qt 的包含目录。
6. 库文件路径 link_directories
作用:告诉链接器去哪里找 .dll/.so/.lib 库文件。
7. 定义编译目标(核心)
7.1 生成可执行程序
7.2 生成静态库 .lib/.a
add_library(MyStaticLib STATIC ${SRCS})
7.3 生成动态库 .dll/.so
8. 链接库 target_link_libraries
最核心指令:给目标程序链接依赖库。
9. 宏定义 add_definitions / target_compile_definitions
作用:代码中可使用的宏,相当于 #define
10. 输出目录配置(企业必配)
控制 exe/dll/so 输出到指定文件夹,不乱根目录散落。
四、CMake 常用内置变量(高频)
五、跨平台写法(企业必备)
Windows / Linux / Mac 差异化编译配置
六、多目录/多模块编译(大型项目)
使用 add_subdirectory 嵌套子 CMakeLists.txt,类似 Qt subdirs 架构。
目录结构:
根 CMake 写入:
实现模块化编译、依赖隔离,企业大型项目标准架构。
七、消息打印与调试
调试 CMake 脚本专用,查看变量值、路径、平台信息。
message(STATUS "项目路径: ${PROJECT_SOURCE_DIR}") message(STATUS "编译模式: ${CMAKE_BUILD_TYPE}") message(STATUS "程序名称: ${APP_NAME}")
八、完整可直接运行的 CMakeLists.txt 模板
通用 C++ 项目(复制即用)
九、CMake 编译命令(必背)
1. 新建 build 目录(外部编译,干净无垃圾)

2. 生成构建文件
3. 编译
十、CMake 与 Qt .pro 对应关系(快速迁移)
|
Qt .pro |
CMakeLists.txt |
|---|---|
|
TEMPLATE = app |
add_executable() |
|
TEMPLATE = lib |
add_library() |
|
INCLUDEPATH |
include_directories() |
|
LIBS |
target_link_libraries() |
|
DEFINES |
add_definitions() |
|
SOURCES |
set(SRCS) |
|
SUBDIRS |
add_subdirectory() |
十一、高频坑点与注意事项
-
外部编译原则:必须新建 build 文件夹编译,禁止源码目录编译,避免垃圾文件污染项目。
-
变量缓存问题:修改 CMake 配置后,必须删除 build 缓存,否则不生效。
-
链接顺序问题:CMake 链接库顺序为「依赖在后」,被依赖的库放后面。
-
路径禁止中文/空格:所有项目路径绝对不能有中文、空格、特殊字符。
-
全局与私有作用域:优先使用
target_xxx指令(针对单个目标),少用全局指令,避免模块互相干扰。 -
多模块依赖:子模块编译顺序由
add_subdirectory顺序决定,被依赖模块先编译。
十二、Qt 项目 CMake 最简模板(适配你的企业项目)

极简通用 CMakeLists.txt 模板(C++ 基础项目)
适配:纯C++普通项目、小型工具类项目、入门练习、跨平台编译(Windows/Linux/Mac),代码精简无冗余,开箱即用。
配套项目目录结构(标准最简结构)
快速编译运行命令
模板扩展说明
-
添加第三方库:末尾新增
target_link_libraries(${PROJECT_NAME} 库名)即可链接系统/自定义库 -
开启调试模式:编译时执行
cmake .. -DCMAKE_BUILD_TYPE=Debug -
生成动态/静态库:将
add_executable替换为add_library(库名 STATIC/SHARED ${PROJECT_SRCS})
更多推荐












所有评论(0)