- father::应用程序构建工具
CMake 基础
CMake 是一个跨平台的构建系统,可以管理项目的编译过程。它通过使用简单的配置文件(CMakeLists.txt)来定义项目结构和构建规则。
CMakeLists.txt 基本结构
-
cmake_minimum_required: 指定项目所需的最低 CMake 版本。
cmake_minimum_required(VERSION 3.10) -
project: 定义项目名称和语言。
project(MyProject LANGUAGES CXX) -
add_executable 或 add_library: 添加可执行文件或库。
add_executable(MyExecutable main.cpp)
常用命令
-
set: 设置变量值。
set(SOURCE_FILES main.cpp helper.cpp) -
include_directories: 添加头文件搜索路径。
include_directories(${PROJECT_SOURCE_DIR}/include) -
target_link_libraries: 链接库到目标。
target_link_libraries(MyExecutable MyLibrary)
使用外部库
CMake 支持多种方式来引入外部库,例如使用 find_package 和 find_library 命令。
find_package(OpenCV REQUIRED)
include_directories(${OpenCV_INCLUDE_DIRS})
target_link_libraries(MyExecutable ${OpenCV_LIBS})构建与安装
CMake 提供了一套标准化的构建与安装过程,通常包括以下步骤:
-
创建构建目录并进入目录:
mkdir build && cd build -
使用 CMake 配置项目:
cmake .. -
编译项目:
make -
安装生成的二进制文件:
make install
跨平台支持
CMake 的一大优势在于其跨平台支持。在不同的平台上,CMake 可以生成适合该平台的原生构建系统,如 Unix Makefiles、Ninja、Visual Studio 项目等。
# 在 Windows 上生成 Visual Studio 项目
cmake -G "Visual Studio" ..
# 在 Linux 上使用 Ninja 构建系统
cmake -G "Ninja" ..高级特性
自定义命令和目标
可以使用 add_custom_command 和 add_custom_target 来添加自定义步骤,例如生成代码或调用脚本。
条件语句和循环
CMake 支持条件判断和循环控制结构,使得配置更加灵活。
if(WIN32)
message("This is Windows")
endif()
foreach(src IN LISTS SOURCE_FILES)
message("Source file: ${src}")
endforeach()模块与包管理
通过外部模块和包管理工具(如 CPM.cmake、vcpkg),可以更方便地管理依赖关系。