1. 什么是CMake?
CMake是一个跨平台的自动化构建工具,用于管理C/C++项目的编译过程。它通过简单的配置文件(CMakeLists.txt
)生成不同平台(如Windows的Visual Studio、Linux的Makefile、macOS的Xcode)所需的构建文件,解决手动编写Makefile或维护多平台项目的痛点。
为什么选择CMake?
- 跨平台支持:一套配置,多平台编译。
- 简洁高效:语法清晰,支持模块化配置。
- 生态强大:兼容CTest、CPack等工具链。
2. 安装CMake
Windows
- 下载安装包:访问 CMake官网 下载Windows版本的.msi安装包。
- 安装时勾选 “Add CMake to the system PATH”,确保命令行可用。
验证安装:
cmake --version # 应输出CMake 的版本
3. 第一个CMake项目:Hello World
项目结构
创建一个空文件夹hello_cmake
,包含两个文件:
hello_cmake/
├── CMakeLists.txt # CMake配置文件
└── main.cpp # 源代码
编写代码
main.cpp:
#include <iostream>
int main() {
std::cout << "Hello CMake!" << std::endl;
return 0;
}
编写CMakeLists.txt
CMakeLists.txt:
cmake_minimum_required(VERSION 3.0) # 指定CMake最低版本
project(HelloCMake) # 定义项目名称
# 添加可执行文件:将main.cpp编译为hello_cmake
add_executable(hello_cmake main.cpp)
4. 解析CMakeLists.txt
关键命令说明
-
cmake_minimum_required
指定CMake的最低版本要求,避免兼容性问题。 -
project(ProjectName)
定义项目名称,同时隐式设置变量PROJECT_NAME和CMAKE_PROJECT_NAME。 -
add_executable(TargetName SourceFiles)
告诉CMake如何将源代码(如.cpp)编译为可执行文件。
argetName
:生成的可执行文件名(如hello_cmake)。
SourceFiles
:源文件列表(如main.cpp)。
5. 构建与运行
生成构建系统
在项目根目录下执行:
# 创建并进入build目录(推荐隔离构建文件)
mkdir build
cd build
# 生成构建系统(假设使用默认的Makefile)
cmake ..
cmake ..
会根据上一级目录的CMakeLists.txt
生成构建文件。- 生成的中间文件(如
Makefile
)会保存在build
目录中。
编译项目
# Windows(若生成的是Visual Studio工程,需用MSBuild)
cmake --build . # 跨平台编译命令
运行程序
# Windows
.\Debug\hello_cmake.exe
输出结果:
Hello CMake!
6. 总结与下一步
- 核心流程:编写
CMakeLists.txt
→ 生成构建系统 → 编译 → 运行。 - 关键命令:
project()
,add_executable()
。 - 最佳实践:始终在
build
目录中构建项目,避免污染源码。
常见问题
- **“No such file or directory”**错误
检查CMakeLists.txt
中源文件路径是否正确。 - 缓存问题
删除build
目录重新生成(rm -rf build
)。 - CMake版本过低
升级CMake或调整cmake_minimum_required
版本。