CMake 构建步骤如下:
- 创建
CMakeLists.txt
文件:定义项目、目标和依赖。 - 创建构建目录:保持源代码目录整洁。
- 配置项目:使用 CMake 生成构建系统文件。
- 编译项目:使用构建系统文件编译项目。
- 运行可执行文件:执行生成的程序。
- 清理构建文件:删除中间文件和目标文件。
假设我们有一个简单的 C++ 项目,包含一个主程序文件和一个库文件,我们将使用 CMake 构建这个项目。
我们的项目结构如下:
MyProject/ ├── CMakeLists.txt ├── src/ │ ├── main.cpp │ └── mylib.cpp └── include/└── mylib.h
main.cpp
:主程序源文件。mylib.cpp
:库源文件。mylib.h
:库头文件。CMakeLists.txt
:CMake 配置文件。
1、创建 CMakeLists.txt 文件
在 MyProject 目录下创建 CMakeLists.txt 文件。
CMakeLists.txt 文件用于配置 CMake 项目。
CMakeLists.txt 文件内容:
实例
cmake_minimum_required(VERSION 3.10) # 指定最低 CMake 版本
project(MyProject VERSION 1.0) # 定义项目名称和版本
# 设置 C++ 标准为 C++11
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
# 添加头文件搜索路径
include_directories(${PROJECT_SOURCE_DIR}/include)
# 添加源文件
add_library(MyLib src/mylib.cpp) # 创建一个库目标 MyLib
add_executable(MyExecutable src/main.cpp) # 创建一个可执行文件目标 MyExecutable
# 链接库到可执行文件
target_link_libraries(MyExecutable MyLib)
说明:
cmake_minimum_required(VERSION 3.10)
:指定 CMake 的最低版本为 3.10。project(MyProject VERSION 1.0)
:定义项目名称为MyProject
,版本为 1.0。set(CMAKE_CXX_STANDARD 11)
:指定 C++ 标准为 C++11。include_directories(${PROJECT_SOURCE_DIR}/include)
:指定头文件目录。add_library(MyLib src/mylib.cpp)
:创建一个名为MyLib
的库,源文件是mylib.cpp
。add_executable(MyExecutable src/main.cpp)
:创建一个名为MyExecutable
的可执行文件,源文件是main.cpp
。target_link_libraries(MyExecutable MyLib)
:将MyLib
库链接到MyExecutable
可执行文件。
2、创建构建目录
为了保持源代码目录的整洁,我们将在项目根目录下创建一个单独的构建目录。
创建构建目录
打开终端,进入 MyProject 目录,然后创建构建目录:
mkdir build cd build
3、配置项目
在构建目录中使用 CMake 配置项目。
这将生成适合平台的构建系统文件(如 Makefile)。
运行 CMake 配置
在构建目录中运行 CMake 配置命令:
cmake ..
cmake ..
:..
指向源代码目录,即包含CMakeLists.txt
文件的目录。CMake 将读取CMakeLists.txt
文件并生成构建系统文件。
4、编译项目
使用生成的构建系统文件编译项目。根据生成的构建系统文件类型,使用相应的构建命令。
使用 Makefile
如果生成了 Makefile(在大多数类 Unix 系统中默认生成),可以使用 make 命令进行编译:
make
make
:编译项目并生成可执行文件MyExecutable
。
5、运行可执行文件
编译完成后,可以运行生成的可执行文件。
运行可执行文件
在构建目录中,运行 MyExecutable:
./MyExecutable
6、清理构建文件
清理构建文件以删除生成的中间文件和目标文件。
使用 make clean
如果在 CMakeLists.txt 中定义了清理规则,可以使用 make clean 命令:
make clean
make clean
:删除中间文件和目标文件。
手动删除
如果没有定义清理规则,可以手动删除构建目录中的所有文件:
rm -rf build/*