CMAKE——set()函数及常用变量名

 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()


 
 


版权声明:本文为Zhanganliu原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。