【第二节】CMake 基础指南

目录

前言

一、CMakeLists.txt 文件概述

二、文件结构与基本语法

2.1 指定 CMake 最低版本

2.2 定义项目名称和语言

2.3 生成可执行文件

2.4 创建库

2.5 链接目标与库

2.6 添加头文件搜索路径

2.7 设置变量

2.8 设置目标属性

2.9 安装规则

2.10 条件语句

2.11 自定义命令

三、实例:一个简单的 CMakeLists.txt

四、 变量与缓存

4.1 定义与使用变量

4.2 缓存变量

五、查找库和包

5.1 基本用法

5.2 指定版本

5.3 查找库并指定路径

5.4 使用查找到的库

5.5 设置包含目录和链接目录

六、使用第三方库示例

七、总结


 

前言

        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 管理项目构建过程,实现跨平台开发的统一构建标准。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

攻城狮7号

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值