如何在不同的 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})
在此示例中,Var3 可以在
exe
和 dll
的 CMake 文件中看到,因为它在 Main
中定义。但是,在 exe
中定义的 Var1 在 dll
中不会被观察到。我只是好奇:有没有办法让 exe
中定义的 Var1 在 dll
中可观察到?
除了 Tadeusz 正确所说的之外,您可以使用以下方法使变量在任何级别(不仅仅是一级!)可见:
set(Var1 "This is variable 1" CACHE INTERNAL "")
该变量将可用于该指令之后的所有 CMake 指令,因此,例如,它不可用于在定义此变量的目录之前添加的姊妹目录。
add_subdirectory
添加的 CMakeFiles.txt 文件可以访问其自身以及父作用域(示例中的顶级全局作用域)中定义的变量。您可以使用以下方法导出上一级变量:
set(Var1 "This is variable 1" PARENT_SCOPE)
list(TRANSFORM)
,这些修改没有反映在全局范围内 - 显然
list
命令仅就地修改局部变量,而不是全局变量 - 我使用了中间变量作为解决方法:
set(MOC_HEADERS
application.hxx
command.hxx
menubar.hxx
uiloader.hxx
)
list(TRANSFORM MOC_HEADERS PREPEND "${CMAKE_CURRENT_LIST_DIR}/")
set(EASYQT_MOC_HEADERS ${MOC_HEADERS} CACHE INTERNAL "")