22

如何在不同的 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)

可执行文件

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

动态链接库文件

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

在此示例中,可以在 CMake 文件中看到 Var3,exedllMain. 但是,在 中定义的 Var1exe将不会在 中观察到dll。我只是好奇:有没有办法让 Var1 在exeobservable in 中定义dll

4

2 回答 2

24

除了 Tadeusz 正确所说的之外,您可以使用

set(Var1 "This is variable 1" CACHE INTERNAL "")

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

于 2013-11-08T13:09:21.500 回答
14

变量可见性的范围形成一棵树。添加的 CMakeFiles.txt 文件add_subdirectory可以访问自己定义的变量,以及在父范围(示例中的顶级全局范围)中定义的变量。

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

set(Var1 "This is variable 1" PARENT_SCOPE)
于 2013-11-08T11:37:35.347 回答