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

fee*_*ree 13 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)
Run Code Online (Sandbox Code Playgroud)

EXE文件

set(Var1 "this is variable 1")
set(Var1 ${Var1} " added to varible 1")
message(STATUS ${Var1})
Run Code Online (Sandbox Code Playgroud)

DLL文件

set(Var2 "this is variable 2")
message(STATUS ${Var2})
message(STATUS ${Var1})
message(STATUS ${Var3})
Run Code Online (Sandbox Code Playgroud)

在这个例子中,VAR3可以的CMake的文件中可以看出exe,并dll因为它是在定义Main.但是,exe将不会在其中定义Var1 dll.我只是很好奇:有没有办法让var1在exeobservable中定义dll

Ant*_*nio 14

除了Tadeusz正确的说法之外,你可以通过使用在任何级别(不只是一个!)使变量可见

set(Var1 "This is variable 1" CACHE INTERNAL "")
Run Code Online (Sandbox Code Playgroud)

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


Tad*_*ski 10

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

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

set(Var1 "This is variable 1" PARENT_SCOPE)
Run Code Online (Sandbox Code Playgroud)