CMake:set介绍

一、简单介绍

        set 和 unset 为一对相反的指令,分别为设置变量以及取消设置变量。

1、什么是变量?

        变量就是用于保存值的存储单元。

2、set 有哪几种?

        set 有三种:

  •  设置一般变量(Set Normal Variable)
  •  设置缓存变量(Set Cache Entry)
  • 设置环境变量(Set Environment Variable)

// 1. 设置一般变量(Set Normal Variable)
set(<variable> <value>... [PARENT_SCOPE])

// 2. 设置缓存变量(Set Cache Entry)
set(<variable> <value>... CACHE <type> <docstring> [FORCE])

// 3. 设置环境变量(Set Environment Variable)
set(ENV{<variable>} [<value>])

3、变量的作用域

        Function Scope: 在函数内部定义,仅仅在当前函数以及所调用的子函数内有效;
        Directory Scope: 在当前目录的定义的变量,当调用子目录时候,子目录会复制一份父级目录内的变量到子目录中
        Persistent Cache: 持久化的缓存,一般由CACHE 存储起来。

4、变量的搜索路径

        在当前 Function Scope 调用内查找,找到后使用,未找到进行下一步;
        在当前目录下面查找,找到使用,未找到下一步;
        在 CACHE 中寻找,找到使用,未找到,则为空.

二、设置一般变量(Normal Variable)

set(<variable> <value>... [PARENT_SCOPE])

将一个或者多个值 <value>... 赋值给变量 <variable>, 多个值之间以分号(;)分隔。

1、参数解析

PARENT_SCOPE
配置该选项后,表示该变量在父级作用域上有效, 在当前作用域上是无效的;

2、Coding

目录结构如下:

rs:cmake-set$ tree
.
├── CMakeLists.txt
├── main.cpp
└── subdir
    └── CMakeLists.txt

顶层的 CMakeLists.txt

cmake_minimum_required(VERSION 3.5)

project(DEMO VERSION 10.2.1.3 LANGUAGES CXX C ASM )

# 设置一般变量
set(PNAME rsenjoyer)
set(PGRADE 80 85 90 95)

message("top name = ${PNAME}")  # top name = rsenjoyer
message("top grade = ${PGRADE}") #top grade = 80;85;90;95

add_subdirectory(subdir)

message("top after name = ${PNAME}")  # top name = rsenjoyer

add_executable(DEMO main.cpp)

子目录的 CMakeLists.txt

set(PNAME jack)
message("sub name = ${PNAME}") # sub name = jack

# 仅仅会改变父级的 PNAME, 对当前的变量不会更改
set(PNAME rose PARENT_SCOPE)
message("sub name = ${PNAME}") #sub name = jack

三、设置缓存变量(Set Cache Entry)

set(<variable> <value>... CACHE <type> <docstring> [FORCE])

作用:

  • 设置变量并缓存到 CMakeCache.txt
  • 默认不会覆盖已缓存(已存在于 CMakeCache.txt )的变量;

1、 参数解析

        a)、类型 type
                类型 type 必须为以下的一种

                BOOL:布尔值(ON/OFF)
                FILEPATH:文件路径
                PATH:目录路径
                STRING:字符串
                INTERNAL:单行文字
       b)、 描述字符串 <docstring>

                单行文字,用于 CMAKE-GUI 的时提示用户

        c)、FORCE

                用于是否强制更新缓存里面的值,配置后,每次都会强制更新CMakeCache.txt 里面的值

四、设置环境变量(Set Environment Variable)

set(ENV{<variable>} [<value>])

作用

  • 设置环境变量 <variable>,值为 <value>
  • 如果 <value> 不存在或者为空字符串 表示清除该环境变量

五、环境变量与一般变量区别

参考: https://cmake.org/cmake/help/latest/manual/cmake-language.7.html#cmake-language-variables

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

技术探索者

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

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

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

打赏作者

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

抵扣说明:

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

余额充值