CMake 使用详解

CMake 是一种跨平台的构建系统工具,用于管理软件项目的构建过程。
它通过描述项目的构建配置生成本地构建系统文件(如 Makefile 或 Visual Studio 工程文件)。

核心概念

  1. CMakeLists.txt
    每个项目目录都需要一个 CMakeLists.txt 文件来定义构建规则。它是 CMake 的核心配置文件,描述了目标、依赖关系和构建步骤。
  2. 构建目录
    CMake 通常在一个单独的目录中生成构建文件,保持源代码目录干净。
  3. 生成器(Generator)
    CMake 根据目标平台和构建工具生成对应的构建文件。例如:
  • Unix Makefiles
  • Ninja
  • Visiual Studio 工程文件
  1. 目标(Targets)
    CMake 使用目标(如库和可执行文件)来组织构建过程。常见的目标包括 add_executableadd_library

基本语法

配置和版本要求

cmake_minimum_required(VERSION 3.20)
project(MyProject VERSION 1.0 LANGUAGES CXX)

添加可执行文件或库

add_executable(MyApp main.cpp)
add_library(MyLib STATIC mylib.cpp)

指定源文件

可以直接写文件名或用变量引用:

set(SOURCES main.cpp helper.cpp)
add_executable(MyApp ${SOURCES})

链接库

target_link_libraries(MyApp PRIVATE MyLib)

设置编译选项

target_compile_options(MyApp PRIVATE -Wall -Wextra)

指定头文件目录

target_include_directories(MyApp PRIVATE include)

常用命令

  1. 项目管理
  • project():设置项目名称和属性。
  • set():定义变量。
  1. 构建目标
  • add_executable()add_library()
  • target_sources():动态添加源文件。
  • target_compile_definitions():定义宏。
  1. 依赖管理
  • find_package():查找已安装的包。
  • find_library():查找已安装的库。
  • find_path():查找包含目录。
  1. 条件逻辑
if(CMAKE_SYSTEM_NAME STREQUAL "Linux")
	message("Building for Linux")
endif()
  1. 自定义命令
add_custom_command(
	OUTPUT generated_file.cpp
	COMMAND python generate_code.py
	DEPENDS generate_code.py
)
  1. 安装和打包
  • install():定义安装规则。
  • cmake --install: 安装到目标路径。
  • 打包工具如 CPack 用于生成 .deb.rpm 文件。

常见 CMake 变量

  1. 全局变量
  • CMAKE_C_COMPILER: 设置 C 编译器。
  • CMAKE_BUILD_TYPE:构建类型(如 Debug、Release)。
  • CMAKE_INSTALL_PREFIX:安装路径。
  1. 目标相关变量
  • CMAKE_CXX_STANDARD: C++ 标准(如11、14、17)。
  • CMAKE_RUNTIME_OUTPUT_DIRECTORY:可执行文件输出路径。
  1. 项目相关变量
  • PROJECT_SOURCE_DIR:源码根目录。
  • PROJECT_BINARY_DIR:构建目录。

CMake 构建过程

  1. 配置阶段
    执行以下命令生成构建文件:
cmake -S . -B build

-S 指定源码路径,-B 指定构建路径。

  1. 构建阶级
    使用生成的构建文件进行编译:
cmake --build build
  1. 安装阶段
    安装生成的文件到指定目录:
cmake --install build --prefix /path/to/install

示例:完整的 CMakeLists.txt

cmake_minimum_required(VERSION 3.20)
project(MyProject VERSION 1.0 LANGUAGES CXX)

# 设置 c++ 标准
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

# 添加可执行文件
add_executable(MyApp main.cpp)

# 链接外部库
find_package(Boost REQUIRED)
target_link_libraries(MyApp PRIVATE Boost::Boost)

# 设置安装规则
install(TARGETS MyApp DESTINATION bin)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值