如何在不同的CMake文件之间共享变量

时间:2013-11-08 11:34:01

标签: cmake

如何在不同的CMake文件之间共享变量,并显示以下示例来说明我的问题:

主要

cmake_minimum_required(VERSION 2.6)
project(test)
set(Var3 "Global variable")

add_subdirectory(${test_SOURCE_DIR}/exe)
add_subdirectory(${test_SOURCE_DIR}/dll)

EXE文件

set(Var1 "this is variable 1")
set(Var1 ${Var1} " added to varible 1")
message(STATUS ${Var1})

DLL文件

set(Var2 "this is variable 2")
message(STATUS ${Var2})
message(STATUS ${Var1})
message(STATUS ${Var3})

在此示例中,可以在exedll的CMake文件中看到Var3,因为它在Main中定义。但是,在exe中将不会观察到dll中定义的Var1。我只是很好奇:有没有办法在exe dll中{{1}}中观察到Var1的定义?

2 个答案:

答案 0 :(得分:14)

除了Tadeusz正确的说法之外,你可以使用

在任何级别(不只是一个!)显示变量。
set(Var1 "This is variable 1" CACHE INTERNAL "")

该变量可用于该指令后面的所有CMake指令,例如,它不适用于在定义此变量的目录之前添加的姐妹目录。

答案 1 :(得分:10)

变量可见性的范围形成树。添加了add_subdirectory的CMakeFiles.txt文件可以访问自己定义的变量,也可以访问父作用域(示例中的顶层全局作用域)。

您可以使用以下方法将变量导出一级:

set(Var1 "This is variable 1" PARENT_SCOPE)