添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

CMake 同样可以使用变量,比如当依赖文件过多或需要生成的项目繁杂,就可以使用变量统一管理,也便于以后的条件编译。

CMake 变量分为 环境变量 普通变量

环境变量: CMake 进程中具有全局范围,其初始值为进程调用时的值,后面可以通过 set() unset() 修改,但修改的值仅在当前进程有效,不影响整个系统环境。

普通变量: 通过 set() unset() 创建和销毁,具有动态作用域。

4.1 定义变量(赋值)

CMake 定义变量分显式和隐式两种。
显式定义: 即使用 set() 等语句,可以自定义变量。
隐式定义: 是在使用其他语句时自动创建的变量,如 project 是定义项目名称的,但在定义的同时, <projectname>_BINARY_DIR <projectname>_SOURCE_DIR 两个变量就被隐式定义了。
例如:
只执行下面语句:

project(test_4)

test_4_BINARY_DIRtest_4_SOURCE_DIR 两个变量就被隐式定义了。

set语句语法

set(<variable> [<value>...]// 普通变量
set(ENV{<variable>} [<value>]) // 环境变量
  • 如给定变量值value,则将该值赋给该变量,如:set(TEST test)
  • 如不给定变量值value,则会销毁该变量,同unset,如:set(TEST)
set(USER_KEY "Hello World")
# USER_KEY = "Hello World"

对于普通变量,可以为一个变量赋多值,会返回一个以;分隔的列表:

set(USER_KEY 
	"Hello World"
	"Hello CMake"
# USER_KEY = "Hello World;Hello CMake"

4.2 引用变量(取值)

使用 ${variable} 进行变量引用。在 if 等语句中,直接使用变量名而不通过 ${variable} 取值。

对于环境变量,需要使用$ENV{variable}

例如 CMake学习(一)中CMakeLists.txt内容:

# CMakeLists.txt
# CMake最低版本要求
cmake_minimum_required(VERSION 3.5)
# 项目名称
project(test_1)
# 生成可执行文件,test_1是可执行文件的名字,hello.c是源文件名称,如有其他源文件,可在后面添加
add_executable(test_1 hello.c) 

可以修改为:

# CMakeLists.txt
# CMake最低版本要求
cmake_minimum_required(VERSION 3.5)
# 项目名称
project(test_1)
set(SOURCE hello.c)
# 生成可执行文件,test_1是可执行文件的名字,hello.c是源文件名称,如有其他源文件,可在后面添加
add_executable(test_1 ${SOURCE}) 

4.3 一些常用的CMAKE变量

Variable Basics 像其他编程语言一样,变量CMake工作的基石。使用set()命令进行变量的命名,变量对大小写敏感。 set(varName value... [PARENT_SCOPE]) In CMake, a variable has a particular scope, much like how variables in other languages have scope limited to a particular function,
CMake中一些预定义变量 PROJECT_SOURCE_DIR cmake命令后紧跟的目录,一般是工程的根目录 PROJECT_BINARY_DIR 执行cmake命令的目录,通常是${PROJECT_SOURCE_DIR}/build CMAKE_INCLUDE_PATH 系统环境变量,非cmake变量 CMAKE_LIBRARY_PATH 系统环境变量,非cmake变量 CMAKE_CURRE