cmake 变量定义set 和unset
在cmake 中变量有两种:
- 变量(普通、缓存)
- 环境变量
1. 变量定义
1.1 普通变量定义
set(<variable> <value>... [PARENT_SCOPE])
在CMAKE 中没有定义类型概念,set定义变量都AUTO类型,系统自动分配。
在使用set关键字时,定义一个变量必须给出变量值value;如果没有给出变量值,则认为清空变量,相当于unset(variable)
.
如果给出PARENT_SCOPE
选项,则变量将设置在当前范围之上的范围中。每个新目录或function()
命令创建一个新范围。还可以使用以下命令创建范围 block()
命令。 set(PARENT_SCOPE)
将变量的值设置到父目录、调用函数或包含范围(以适用于当前情况的为准)。变量值的先前状态在当前作用域中保持不变(例如,如果它之前未定义,则它仍然是未定义,如果它有一个值,它仍然是该值)。
block(PROPAGATE)
和return(PROPAGATE)
命令可以用作set (PARENT_SCOPE)
的替代方法 和un set (PARENT_SCOPE)
命令来更新父范围。
1.2 设置缓存条目
格式:
set(<variable> <value>... CACHE <type> <docstring> [FORCE])
设置给定的缓存<variable>
(缓存条目)。由于缓存条目旨在提供用户设置的表值,因此默认情况下不会覆盖现有的缓存条目。使用FORCE
选项覆盖现有条目。
<type>
必须指定为以下之一:
BOOL
Boolean ON/OFF
值。 cmake-gui(1)
提供了一个复选框。
FILEPATH
磁盘上文件的路径。 cmake-gui(1)
提供文件对话框。
PATH
磁盘上目录的路径。 cmake-gui(1)
提供文件对话框。
STRING
一行文字。如果设置了 STRINGS
缓存条目属性, cmake-gui(1)
会提供文本字段或下拉选择。
INTERNAL
一行文字。 cmake-gui(1)
不显示内部条目。它们可用于跨运行持久存储变量。使用此类型意味着 FORCE
。
<docstring>
必须指定为一行文本,提供选项的快速摘要以呈现给 cmake-gui(1)
用户。
如果在调用之前缓存条目不存在或者给出了 FORCE
选项,则缓存条目将被设置为给定值。
[!NOTE]
如果已存在同名的普通变量,则将无法直接访问缓存变量的内容(请参阅 rules of variable evaluation )。如果策略CMP0126
设置为OLD
,则当前作用域中的任何正常变量绑定都将被删除。
如果缓存条目是由用户通过-D<var>=<value>
选项在cmake(1)
命令行上创建的,但未指定类型,则该缓存条目可能在调用之前就已存在,但没有设置类型。在这种情况下,set
命令将添加类型。此外,如果<type>
是PATH
或FILEPATH
,并且命令行上提供的<value>
是相对路径,则set
命令将该路径视为相对于当前工作目录并将其转换为绝对路径。
2 环境变量设置
set(ENV{<variable>} [<value>])
将 Environment Variable
设置为给定值。 $ENV{<variable>}
的后续调用将返回这个新值。
此命令仅影响当前的 CMake 进程,而不影响调用 CMake 的进程,也不会影响整个系统环境,也不会影响后续构建或测试进程的环境。
如果 ENV{<variable>}
之后没有给出参数或者 <value>
是空字符串,则此命令将清除环境变量的任何现有值。
<value>
之后的参数将被忽略。如果发现额外的参数,则会发出作者警告。
3 unset 取消设置
unset(<variable> [CACHE | PARENT_SCOPE])
unset(ENV{<variable>})
就是取消设置的定义,让变量名返回为空,使之前定义的变量不起作用。
标签:缓存,cmake,变量,条目,set,设置,unset From: https://blog.csdn.net/qq_44992918/article/details/144472944