Variable

变量 Variable

cmake 变量使用的是动态作用域(dynamic scope). 所有的变量类型都是字符串 string. 变量名是大小写敏感的.

使用 set() 命令来定义及修改一个变量:

set(PROJECT_VERSION 3.1)

如果一个变量未定义, 它的值就是 undefined 的, 是一个空字符串.

取消一个变量的定义, 可以用 unset() 命令.

使用如 ${ ... } 的形式展开变量.

缓存变量 Cache Entry

缓存变量, 只需要在第一次运行 cmake 时生成的, 之后再运行 cmake 时, 可以从 CMakeCache.txt 中读取. 缓存变量, 可以在 ccmakecmake-qt 交互式界面中出现. 全局可见, 变量查找优先级低.

定义一个缓存变量:

option(USE_SYSTEM_ZLIB "Use system zlib or compiled from source" OFF)

上面定义的缓存变量, 等同于使用 set 命令:

set(USE_SYSTEM_ZLIB OFF CACHE BOOL "User system zlib or compiled from source")

使用 set() 命令时, 需要指定变量类型:

  • BOOL
  • STRING
  • FILEPATH
  • PATH
  • INTERNAL, 内部使用, 不会出现在 cmake 交互式界面

支持枚举类型:

set(COMPRESS_LIB "zlib" CACHE STRING "Select a file compression library")
set_property(CACHE COMPRESS_LIB PROPERTY STRINGS "zlib" "zstd" "snappy" "lzma")

可以使用 $CACHE{varialbe} 的形式来读取, 比如 $CACHE{COMPRESS_LIB}

环境变量 Env

全局可见. 读取环境变量, $ENV{variable}, 比如: message(STATUS "Current user: $ENV{USER}")

修改环境变量:

set(ENV{OLDPWD} "/tmp")

所有的可用环境变量可以在 CMake Environment 手册 中查看.