CMake 是一个跨平台的开源工具,旨在管理项目的构建过程。它通过使用平台无关的配置文件生成特定平台的构建文件(如 Makefile 或 Visual Studio 项目文件)。CMake 的灵活性和广泛的适用性使其成为现代 C++ 项目中常用的构建工具。
基本概念
- CMakeLists.txt:CMake 使用一个或多个名为
CMakeLists.txt
的文件来配置构建过程。这个文件包含项目名称、版本信息、源文件列表、编译选项、库依赖等信息。 - 构建目录:通常,CMake 项目会在一个单独的目录中构建,这样可以保持源代码目录的整洁。
安装 CMake
在大多数系统上,可以使用包管理器安装 CMake。例如:
- 在 Ubuntu 上:
sudo apt-get install cmake
- 在 macOS 上:
brew install cmake
创建一个简单的 CMake 项目
项目结构
假设有一个简单的项目,目录结构如下:
MyProject/
├── CMakeLists.txt
└── main.cpp
main.cpp
#include <iostream>
int main() {
std::cout << "Hello, CMake!" << std::endl;
return 0;
}
CMakeLists.txt
cmake_minimum_required(VERSION 3.10)
# 项目名称和版本
project(MyProject VERSION 1.0)
# 设置 C++ 标准
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED True)
# 添加可执行文件
add_executable(MyProject main.cpp)
构建项目
-
创建构建目录:
mkdir build cd build
-
运行 CMake:
cmake ..
-
编译项目:
make
生成的可执行文件位于 build
目录中,可以运行它:
./MyProject
输出应为:
Hello, CMake!
添加库
假设我们要添加一个静态库和一个共享库,并在项目中使用它们。项目结构更新如下:
MyProject/
├── CMakeLists.txt
├── main.cpp
├── MathFunctions/
│ ├── CMakeLists.txt
│ ├── MathFunctions.h
│ └── MathFunctions.cpp
MathFunctions/MathFunctions.h
#pragma once
int add(int a, int b);
int multiply(int a, int b);
MathFunctions/MathFunctions.cpp
#include "MathFunctions.h"
int add(int a, int b) {
return a + b;
}
int multiply(int a, int b) {
return a * b;
}
MathFunctions/CMakeLists.txt
# 设置库文件
add_library(MathFunctions STATIC MathFunctions.cpp)
# 将库包含目录暴露给使用该库的目标
target_include_directories(MathFunctions PUBLIC ${CMAKE_CURRENT_SOURCE_DIR})
修改根 CMakeLists.txt
cmake_minimum_required(VERSION 3.10)
project(MyProject VERSION 1.0)
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED True)
# 添加子目录
add_subdirectory(MathFunctions)
# 添加可执行文件
add_executable(MyProject main.cpp)
# 链接 MathFunctions 库
target_link_libraries(MyProject PRIVATE MathFunctions)
修改 main.cpp 使用 MathFunctions
#include <iostream>
#include "MathFunctions.h"
int main() {
int a = 5;
int b = 3;
std::cout << "Add: " << add(a, b) << std::endl;
std::cout << "Multiply: " << multiply(a, b) << std::endl;
return 0;
}
构建项目(再次)
重复之前的步骤,在 build
目录中运行 CMake 和 Make:
cd build
cmake ..
make
./MyProject
输出应为:
Add: 8
Multiply: 15
更多高级用法
-
配置文件生成器:可以生成特定平台的构建文件,如 Visual Studio 项目文件:
cmake -G "Visual Studio 16 2019" ..
-
使用第三方库:可以使用
find_package
找到并链接第三方库,例如Boost
:find_package(Boost 1.65 REQUIRED) include_directories(${Boost_INCLUDE_DIRS}) target_link_libraries(MyProject ${Boost_LIBRARIES})
-
设置编译选项:可以使用
target_compile_options
设置编译选项:target_compile_options(MyProject PRIVATE -Wall -Wextra -Werror)
-
测试支持:可以使用
CTest
添加测试:enable_testing() add_test(NAME MyTest COMMAND MyProject)
通过学习和使用 CMake,可以更好地管理和构建跨平台 C++ 项目,提高开发效率和代码质量。