set : 将一个 CMAKE 变量设置为给定值。
set( <variable> <value> [[CACHE <type> <docstring> [FORCE]] | PARENT_SCOPE])
将变量<variable>的值设置为<value>。在<variable>被设置之前,<value>会被展开。
如果有 CACHE 选项,那么<variable>就会添加到 cache 中;这时<type>和<docstring>是必需的。
<type>被 CMake GUI 用来选择一个窗口,让用户设置值。<type>可以是下述值中的一个:
FILEPATH = 文件选择对话框。
PATH = 路径选择对话框。
STRING = 任意的字符串。
BOOL = 布尔值选择复选框。
INTERNAL = 不需要 GUI 输入端。(适用于永久保存的变量)。如果<type>是内部的(INTERNAL),那么<value>总是会被写入到 cache 中,并替换任何已经存在于 cache 中的值。
如果它不是一个 cache 变量,那么这个变量总是会写入到当前的makefile 中。FORCE 选项将覆盖 cache 值,从而去掉任何用户带来的改变。
如果指定了 PARENT_SCOPE 选项,变量<variable>将会被设置为当前作用域之上的作用域中。每一个新的路径或者函数都可以创建一个新作用域。该命令将会把一个变量的值设置到父路径或者调用函数中(或者任何类似的可用的情形中。)
在这种情形下,<variable>被设置为一个各个值之间由分号分隔的 list。
<variable>可以是环境变量,比如:
set( ENV{PATH} /home/martink )
在这种情形下,环境变量将会被设置
cache:设置全局变量
cache变量全部是全局变量,变量的值可以在CMakeCache.txt中找到,如CMAKE_INSTALL_PREFIX。变量设置方式如下:
set(<variable> <value>... CACHE <type> <docstring> [FORCE])
type 说明
| 类型 | 内容 | cmake-gui效果 |
| BOOL | bool值,只有ON/OFF两种个值 | checkBox,等同效果于OPTION |
| FILEPATH | 文件路径 | 文件对话框 |
| PATH | 目录路径 | 路径对话框 |
| STRING | 字符串 | 输入框或内容为string列表的comboBox |
| INTERNAL | 字符串 | 不在界面显示,使用此类型,则默认FORCE |
删除变量
unset(<variable> CACHE)判断环境变量是否定义 (NOT)DEFINED
set( ENV{PATH} /home/martink )
if(NOT DEFINED ENV{JAVA_HOME})
# 没有找到JAVA_HOME环境变量
message(FATAL_ERROR "not defined environment variable:JAVA_HOME")
endif()
#不能用if(ENV{JAVA_HOME})形式来判断是否定义
#但可以用if($ENV{JAVA_HOME})
if(DEFINED ENV{JAVA_HOME})
# 找到JAVA_HOME环境变量
message(STATUS "defined environment variable:JAVA_HOME")
endif()