一、CMake 简介
CMake 是一个跨平台的构建工具,用于自动化生成不同平台(如 Makefile、Visual Studio、Xcode 等)的构建文件。它的核心是编写 CMakeLists.txt
文件,定义项目的构建规则。
二、安装 CMake
-
Linux:
bashsudo apt-get install cmake
-
Windows:
下载安装包 CMake官网。
-
macOS:
bashbrew install cmake
三、基础用法
1. 最小化 CMake 项目
创建一个 CMakeLists.txt
文件:
cmake
cmake_minimum_required(VERSION 3.10) # 指定 CMake 最低版本
project(MyProject) # 项目名称
add_executable(my_app main.cpp) # 生成可执行文件
2. 构建项目
bash
mkdir build && cd build # 创建构建目录(推荐)
cmake .. # 生成构建文件(如 Makefile)
make # 编译项目(Linux/macOS)
四、核心命令详解
1. 定义项目
cmake
project(
MyProject # 项目名
VERSION 1.0.0 # 版本号(可选)
LANGUAGES C CXX # 支持的语言(C/C++)
)
2. 添加可执行文件
cmake
add_executable(
my_app
# 可执行文件名
main.cpp # 源文件列表
utils.cpp
)
3. 添加库
cmake
# 静态库
add_library(my_lib STATIC lib.cpp)
# 动态库(SHARED)
add_library(my_lib SHARED lib.cpp)
4. 链接库到可执行文件
cmake
target_link_libraries(my_app PRIVATE my_lib)
5. 包含头文件目录
cmake
target_include_directories(
my_app # 目标(可执行文件或库)
PRIVATE # 作用域(PUBLIC/PRIVATE/INTERFACE)
include # 头文件目录
)
6. 设置编译选项
cmake
# 全局编译选项
add_compile_options(-Wall -Wextra)
# 目标专属选项
target_compile_options(my_app PRIVATE -O2)
7. 变量与条件判断
cmake
set(MY_VAR "value") # 定义变量
if (WIN32)
# Windows 平台特有配置
endif()
五、多目录项目结构
1. 子目录管理
project/
├── CMakeLists.txt # 根目录
├── src/
│ ├── CMakeLists.txt
│ └── main.cpp
└── lib/
├── CMakeLists.txt
└── my_lib.cpp
根目录的 CMakeLists.txt
:
cmake
cmake_minimum_required(VERSION 3.10)
project(MyProject)
add_subdirectory(lib) # 包含子目录
add_sadd_subdirectory(src)
子目录的 CMakeLists.txt
(例如 src/CMakeLists.txt
):
cmake
add_executable(my_app main.cpp)
target_link_libraries(my_app PRIVATE my_lib)
六、常用变量
变量名 | 说明 |
---|---|
CMAKE_CXX_STANDARD |
设置 C++ 标准(如 11/14/17) |
CMAKE_BUILD_TYPE |
构建类型(Debug/Release) |
CMAKE_CXX_COMPILER |
指定编译器路径 |
PROJECT_SOURCE_DIR |
项目根目录路径 |
示例:
cmake
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_BUILD_TYPE Debug)
七、进阶功能
1. 生成配置头文件
cmake
configure_file(
config.h.in # 输入文件
config.h # 输出文件
)
2. 查找第三方库
cmake
find_package(Boost REQUIRED COMPONENTS filesystem)
target_link_libraries(my_app PRIVATE Boost::filesystem)
3. 安装目标
cmake
install(
TARGETS my_app # 安装可执行文件
DESTINATION bin # 安装路径(默认 /usr/local/)
)
4. 自定义命令
cmake
add_custom_command(
OUTPUT output_file
COMMAND python3 script.py
DEPENDS input_file
)
八、常见问题
1. 如何生成 IDE 项目(如 Visual Studio)?
bash
cmake -G "Visual Studio 17 2022" ..
2. 如何清理构建文件?
bash
rm -rf build/ # Linux/macOS
3. 如何启用调试信息?
cmake
set(CMAKE_BUILD_TYPE Debug)
九、完整示例
项目结构
demo/
├── CMakeLists.txt
├── include/
│ └── utils.h
├── src/
│ ├── main.cpp
│ └── utils.cpp
└── lib/
└── math/
├── CMakeLists.txt
├── math.h
└── math.cpp
根目录 CMakeLists.txt
cmake
cmake_minimum_required(VERSION 3.10)
project(DemoProject VERSION 1.0)
add_subdirectory(lib/math) # 添加数学库
add_subdirectory(src)
# 设置 C++ 标准
set(CMAKE_CXX_STANDARD 17)
lib/math/CMakeLists.txt
cmake
add_library(math STATIC math.cpp)
target_include_directories(math PUBLIC ${CMAKE_CURRENT_SOURCE_DIR})
src/CMakeLists.txt
cmake
add_executable(demo main.cpp utils.cpp)
target_include_directories(demo PRIVATE ../include)
target_link_libraries(demo PRIVATE math)
参考资料:
CMake文档:CMake Documentation。