关于CMake中不同变量的用法与总结

简介: 关于CMake中不同变量的用法与总结

CMake中的变量

CMake中变量的类型有多种:通过set设置的普通变量和缓存变量、环境变量、数组变量等等,由于CMake在生成的过程中会加载缓存的关系,因此用法不一样。

常用的变量设置语法:


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


普通变量


普通变量(normal variable)相当于编程中脚本内部变量,类似于脚本文件的局部变量,这种变量不能跨越CMakeLists.txt文档。普通变量定义方式如下:


set(var "value")


设置一个普通变量var,值为value,引号的作用可以详见我的另一篇文章。

和编程语言中局部变量的用法类似,这个变量会屏蔽CMake缓存中的同名变量,(类似局部变量屏蔽全局变量)。但是这条语句不会改变缓存中的var变量。


缓存变量


cache variable用于缓存变量,定义如下:


set(var "value" CACHE STRING "" FORCE) |


这条语句设置了一个CACHE语句,类型是STRING,说明信息为空字符串,上述都不能省略。

还有一种方法能够设置CACHE变量,就是通过cmake命令的-D选项,可以添加一个CACHE变量。

CACHE作用如下:

  • 如果缓存中存在同名的变量,根据FORCE来决定是否写入缓存:如果没有FORCE,这条语句不起作用,使用缓存中的变量;如果有FORCE,使用当前设置的值。
  • 注意,如果是FORCE,也能修改-D选项设置的CACHE变量,所以有可能传入的生成命令选项是无效的。
  • 如果缓存中不存在同名的变量,则将这个变量写入缓存并使用。

缓存变量也可以设置只在本文件内生效,将STRING类型改为INTERNAL即可。


环境变量


  • 读取环境变量:$ENV{...}
  • 设置环境变量:set(ENV{...} ...)


option变量


  • 主要是缓存的字符串,只能是ON或OFF,他们允许一些特殊的处理,如依赖,这个变量可以跨文本。
  • 不要将其option与set命令搞错。给定的值option实际上只是“初始值”(在第一个配置步骤中一次传送到缓存),之后将由用户通过CMake的GUI或者命令行进行更改

总结


正常使用的时候,如果有多层CMakeLists.txt,需要跨文本的变量,应该使用CACHE类型,如果只是当前文本的变量,则不需要使用CACHE,更重要的是,应该避免使用同名的普通和缓存变量。另外,由于CMake没有有效的清除缓存的方法,如果要彻底清除缓存,需要删除build或者release文件夹的所有文件

目录
相关文章
|
6月前
|
存储 缓存 编译器
【CMake 命令相关知识】深入理解 CMake命令中的 内置缓存变量
【CMake 命令相关知识】深入理解 CMake命令中的 内置缓存变量
122 0
|
存储 Shell 编译器
makefile 变量赋值方式
makefile 变量赋值方式
92 1
|
存储 Cloud Native Linux
CMake学习之内部变量
CMake学习之内部变量
|
2月前
|
Python
Python变量用法——变量解包
Python变量用法——变量解包
|
3月前
|
存储 编译器 Shell
cmake基于语法和应用
cmake基于语法和应用
|
6月前
|
C语言
gcc的简易用法
【5月更文挑战第10天】gcc的简易用法。
65 8
|
6月前
|
C语言
gcc的简易用法(编译、参数与链接)
【5月更文挑战第14天】gcc的简易用法(编译、参数与链接)。
55 1
makefile 变量的替换,嵌套引用,命令行变量
makefile 变量的替换,嵌套引用,命令行变量
102 1
|
6月前
CMake中FindPackageHandleStandardArgs.cmake文件的作用和用法
CMake中FindPackageHandleStandardArgs.cmake文件的作用和用法
129 2
|
6月前
|
iOS开发 MacOS
CMake基础:CMake中的常用变量的命令
CMake基础:CMake中的常用变量的命令
60 0