[CMake教程] 使用变量

目录

    • 4.1 定义变量(赋值)
    • 4.2 引用变量(取值)
    • 4.3 一些常用的CMAKE变量

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

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

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

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

4.1 定义变量(赋值)

CMake 定义变量分显式和隐式两种。
显式定义: 即使用 set() 等语句,可以自定义变量。
隐式定义: 是在使用其他语句时自动创建的变量,如 project 是定义项目名称的,但在定义的同时,_BINARY_DIR_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变量

  • PROJECT_NAME

    当前项目 project() 指定的项目名称

  • CMAKE_PROJECT_NAME

    顶级项目的名称。

    该变量保存顶级 CMakeLists.txt 文件中指定的项目名称 project() 命令。如果顶层 CMakeLists.txt 包含多个 project() 调用时,将使用顶层 CMakeLists.txt 中最近调用的一个确定 CMAKE_PROJECT_NAME 包含的名称。例如,考虑以下顶级 CMakeLists.txt:

    cmake_minimum_required(VERSION 3.0)
    project(First)
    project(Second)
    add_subdirectory(sub)
    project(Third)
    

    sub/CMakeLists.txt具有以下内容:

    project(SubProj)
    message("CMAKE_PROJECT_NAME = ${CMAKE_PROJECT_NAME}")
    

    最近看到的 project() 来自顶层 CMakeLists.txt 的命令将为project(Second),因此将打印:

    CMAKE_PROJECT_NAME = Second
    
  • CMAKE_BINARY_DIR

    顶层构建树生成二进制文件的目录

  • PROJECT_BINARY_DIR / _BINARY_DIR / CMAKE_CURRENT_BINARY_DIR

    当前项目生成二进制文件的目录

  • CMAKE_SOURCE_DIR

    顶层构建树的目录,即工程顶层 CMakeLists.txt 目录

  • PROJECT_SOURCE_DIR / _SOURCE_DIR / CMAKE_CURRENT_SOURCE_DIR

    当前项目所在的目录,即当前项目的 CMakeLists.txt 目录

  • CMAKE_VERSION

    CMake版本号。它包含 .. 三部分,可以通过以下三个变量分别获取:
    CMAKE_MAJOR_VERSIONCMAKE_MINOR_VERSIONCMAKE_PATCH_VERSION

    并且可以使用以下操作符对版本号进行条件判断:VERSION_LESSVERSION_GREATERVERSION_EQUALVERSION_LESS_EQUALVERSION_GREATER_EQUAL,这里注意版本号不能与浮点数比较。

  • 更多 CMake 变量见 CMake变量 。

你可能感兴趣的:(CMake,cmake,变量)