目录
前言
CMake 是一个强大的跨平台构建工具,广泛用于管理 C/C++ 项目的构建过程。其核心配置文件 `CMakeLists.txt` 定义了项目的构建规则、依赖关系和编译选项。本文将详细介绍 `CMakeLists.txt` 的基本结构、常用指令以及如何查找和使用外部库。
CMake 官网: https://cmake.org/
CMake 官方文档:https://cmake.org/cmake/help/latest/guide/tutorial/index.html
CMake 源码:https://github.com/Kitware/CMake
一、CMakeLists.txt 文件概述
`CMakeLists.txt` 是 CMake 的核心配置文件,用于描述项目的构建逻辑。每个 CMake 项目通常包含一个或多个 `CMakeLists.txt` 文件,这些文件通过一系列指令定义项目的构建流程。
二、文件结构与基本语法
`CMakeLists.txt` 文件由一系列 CMake 指令组成,以下是常见的指令及其用法:
2.1 指定 CMake 最低版本
cmake_minimum_required(VERSION 3.10)
用于指定项目所需的最低 CMake 版本,确保兼容性。
2.2 定义项目名称和语言
project(MyProject CXX)
定义项目名称和使用的编程语言(如 `CXX` 表示 C++)。
2.3 生成可执行文件
add_executable(MyExecutable main.cpp other_file.cpp)
指定生成的可执行文件及其源文件。
2.4 创建库
add_library(MyLibrary STATIC library.cpp)
创建静态库或动态库,并指定源文件。
2.5 链接目标与库
target_link_libraries(MyExecutable MyLibrary)
将目标文件与指定的库链接。
2.6 添加头文件搜索路径
include_directories(${PROJECT_SOURCE_DIR}/include)
添加头文件的搜索路径。
2.7 设置变量
set(CMAKE_CXX_STANDARD 11)
设置变量的值,如指定 C++ 标准。
2.8 设置目标属性
target_include_directories(MyExecutable PRIVATE ${PROJECT_SOURCE_DIR}/include)
为目标设置包含目录等属性。
2.9 安装规则
install(TARGETS MyExecutable RUNTIME DESTINATION bin)
定义安装规则,指定目标文件的安装路径。
2.10 条件语句
if(CMAKE_BUILD_TYPE STREQUAL "Debug")
message("Debug build")
endif()
根据条件执行不同的构建逻辑。
2.11 自定义命令
add_custom_command(
TARGET MyExecutable POST_BUILD
COMMAND ${CMAKE_COMMAND} -E echo "Build completed."
)
在构建过程中执行自定义命令。
三、实例:一个简单的 CMakeLists.txt
以下是一个简单的 `CMakeLists.txt` 示例:
cmake_minimum_required(VERSION 3.10)
project(MyProject CXX)
# 添加源文件
add_executable(MyExecutable main.cpp)
# 设置 C++ 标准
set(CMAKE_CXX_STANDARD 11)
四、 变量与缓存
CMake 使用变量来存储和传递信息,变量分为普通变量和缓存变量。
4.1 定义与使用变量
set(MY_VAR "Hello World")
message(STATUS "Variable MY_VAR is ${MY_VAR}")
4.2 缓存变量
缓存变量存储在 CMake 的缓存文件中,用户可在配置时修改其值。
set(MY_CACHE_VAR "DefaultValue" CACHE STRING "A cache variable")
message(STATUS "Cache variable MY_CACHE_VAR is ${MY_CACHE_VAR}")
五、查找库和包
CMake 提供了 `find_package()` 指令,用于自动检测和配置外部库。
5.1 基本用法
find_package(Boost REQUIRED)
5.2 指定版本
find_package(Boost 1.70 REQUIRED)
5.3 查找库并指定路径
find_package(OpenCV REQUIRED PATHS /path/to/opencv)
5.4 使用查找到的库
target_link_libraries(MyExecutable Boost::Boost)
5.5 设置包含目录和链接目录
include_directories(${Boost_INCLUDE_DIRS})
link_directories(${Boost_LIBRARY_DIRS})
六、使用第三方库示例
以下是一个使用 Boost 库的 `CMakeLists.txt` 示例:
cmake_minimum_required(VERSION 3.10)
project(MyProject CXX)
# 查找 Boost 库
find_package(Boost REQUIRED)
# 添加源文件
add_executable(MyExecutable main.cpp)
# 链接 Boost 库
target_link_libraries(MyExecutable Boost::Boost)
七、总结
通过 `CMakeLists.txt` 文件,用户可以定义项目的构建规则、依赖关系和编译选项。本文介绍了 CMake 的基本指令、变量使用以及如何查找和配置外部库。掌握这些内容后,用户可以高效地使用 CMake 管理项目构建过程,实现跨平台开发的统一构建标准。
757

被折叠的 条评论
为什么被折叠?



