如何在不同的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})
在此示例中,可以在exe
和dll
的CMake文件中看到Var3,因为它在Main
中定义。但是,在exe
中将不会观察到dll
中定义的Var1。我只是很好奇:有没有办法在exe
dll
中{{1}}中观察到Var1的定义?
答案 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)