CMake介绍(六)--CMake 变量和缓存

目录

变量(Variables)

1. 变量的作用

2. 变量命名

3. 设置变量

4. 获取变量

5. 作用域

6. 示例

缓存(Cache)

1. 缓存的作用

2. 缓存变量命名

3. 设置缓存变量

4. 获取缓存变量

5. 缓存类型

6. 缓存变量的交互

7. 示例

变量和缓存的差异

示例:使用变量和缓存

my_project/CMakeLists.txt

src/main.cpp

src/helper.h

src/helper.cpp

构建项目

生成构建文件

编译和构建

安装

总结


 

CMake 使用变量和缓存来存储和管理配置信息,这对于定制构建行为和存储持久性的配置选项非常重要。下面详细介绍 CMake 中的变量和缓存的概念、用法及示例。

变量(Variables)

1. 变量的作用

变量用于存储项目构建过程中的各种信息,如源文件列表、编译选项、路径等。变量可以在 CMakeLists.txt 文件的不同位置设置和使用。

2. 变量命名

变量名称通常以大写字母开头,以区分缓存变量。不过这不是强制性的,只是一种约定。

3. 设置变量

使用 set 命令来设置变量。

 

cmake

深色版本

1set(VARIABLE_NAME value)

如果需要设置多个值,可以使用列表形式:

 

cmake

深色版本

1set(SOURCE_FILES main.cpp helper.cpp)

4. 获取变量

可以直接使用变量名来获取其值:

 

cmake

深色版本

1add_executable(my_executable ${SOURCE_FILES})

5. 作用域

变量有局部作用域和全局作用域。默认情况下,变量在当前 CMakeLists.txt 文件的作用域内有效。如果需要在其他 CMakeLists.txt 文件中使用,可以使用 unset 命令并带 CACHE 选项将其提升到缓存级别,使其在全局范围内可用。

 

cmake

深色版本

1set(MY_VARIABLE value CACHE INTERNAL "Description of variable")

6. 示例

假设我们需要设置项目的源文件列表,并在后续的命令中使用它。

 

cmake

深色版本

1set(SOURCE_FILES main.cpp helper.cpp)
2add_executable(my_executable ${SOURCE_FILES})

缓存(Cache)

1. 缓存的作用

缓存用于存储持久性的配置选项,这些选项通常在第一次配置项目时由用户指定,并且在整个构建过程中保持不变。缓存变量可以在后续构建中重新加载,即使重新运行 CMake。

2. 缓存变量命名

缓存变量通常以大写字母开头,并且通常在命令行中通过 -D 选项传递。

3. 设置缓存变量

使用 set 命令,并带 CACHE 关键字来设置缓存变量。

 

cmake

深色版本

1set(CMAKE_INSTALL_PREFIX "/usr/local" CACHE PATH "Installation prefix")

4. 获取缓存变量

直接使用变量名即可获取其值:

 

cmake

深色版本

1install(TARGETS my_executable DESTINATION ${CMAKE_INSTALL_PREFIX}/bin)

5. 缓存类型

缓存变量有不同的类型,常见的类型有:

  • PATH: 存储路径。
  • STRING: 存储字符串。
  • BOOL: 存储布尔值。
  • FILEPATH: 存储文件路径。
  • INTERNAL: 用于内部使用的变量,不在缓存中显示。

6. 缓存变量的交互

缓存变量可以通过 CMake 的 GUI 工具(如 CMake-GUI)进行修改,也可以通过命令行参数 -D 来设置。

 

sh

深色版本

1cmake .. -DCMAKE_INSTALL_PREFIX="/usr/local"

7. 示例

假设我们需要设置安装路径,并在后续的安装命令中使用它。

 

cmake

深色版本

1set(CMAKE_INSTALL_PREFIX "/usr/local" CACHE PATH "Installation prefix")
2install(TARGETS my_executable DESTINATION ${CMAKE_INSTALL_PREFIX}/bin)

变量和缓存的差异

  • 生命周期:变量在当前 CMakeLists.txt 文件的作用域内有效,而缓存变量在整个构建过程中都有效,并且可以在后续构建中重新加载。
  • 用户交互:缓存变量通常由用户在第一次配置项目时指定,并且可以通过 GUI 或命令行参数进行修改;而变量通常在 CMakeLists.txt 文件内部设置和使用。
  • 显示:缓存变量可以在 CMake 的 GUI 工具中显示和修改,而变量不会显示在 GUI 中。

示例:使用变量和缓存

假设我们有一个项目,需要设置源文件列表、编译选项以及安装路径,并在构建过程中使用它们。

my_project/CMakeLists.txt

 

cmake

深色版本

1cmake_minimum_required(VERSION 3.10)
2project(MyProject VERSION 1.0 LANGUAGES CXX)
3
4# 设置源文件列表
5set(SOURCE_FILES main.cpp helper.cpp)
6
7# 设置编译选项
8set(CMAKE_CXX_STANDARD 14)
9set(CMAKE_CXX_STANDARD_REQUIRED True)
10set(CMAKE_CXX_EXTENSIONS False)
11
12# 设置安装路径
13set(CMAKE_INSTALL_PREFIX "/usr/local" CACHE PATH "Installation prefix")
14
15# 添加可执行文件
16add_executable(my_executable ${SOURCE_FILES})
17
18# 设置头文件目录
19include_directories(include)
20
21# 安装可执行文件
22install(TARGETS my_executable DESTINATION ${CMAKE_INSTALL_PREFIX}/bin)

src/main.cpp

 

cpp

深色版本

1#include <iostream>
2#include "helper.h"
3
4int main() {
5    std::cout << "Hello, World!" << std::endl;
6    return 0;
7}

src/helper.h

 

cpp

深色版本

1#ifndef HELPER_H
2#define HELPER_H
3
4void printHelperMessage();
5
6#endif // HELPER_H

src/helper.cpp

 

cpp

深色版本

1#include "helper.h"
2
3void printHelperMessage() {
4    std::cout << "This is a helper function." << std::endl;
5}

构建项目

生成构建文件

 

sh

深色版本

1mkdir build
2cd build
3cmake .. -DCMAKE_INSTALL_PREFIX="/usr/local"

编译和构建

 

sh

深色版本

1make

安装

 

sh

深色版本

1make install

总结

通过使用 CMake 的变量和缓存,可以有效地管理项目的配置信息。变量主要用于存储临时的、局部的信息,而缓存变量则用于存储持久性的配置选项。合理地使用变量和缓存,可以使项目的构建过程更加灵活和高效。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

小蘑菇二号

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

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

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

打赏作者

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

抵扣说明:

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

余额充值