【问题标题】:How to share variables between different CMake files如何在不同的 CMake 文件之间共享变量
【发布时间】:2013-11-08 11:34:00
【问题描述】:

如何在不同的 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 中定义的 Var1 将不会在 dll 中观察到。我只是好奇:有没有办法让 exe 中定义的 Var1 可以在 dll 中观察到?

【问题讨论】:

  • 有一天我厌倦了能见度的技巧并做了一些extensions

标签: cmake


【解决方案1】:

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

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

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

【讨论】:

  • 这正是我要找的.. CACHE INTERNAL "")。这现在缓存了这些值,因此可以在生成的“CMakefiles”中验证这些值,以及尝试在不同项目中使用“STATUS”将值记录到 CMakeLists.txt 中时(特别是在依赖子项目的案例”。
【解决方案2】:

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

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

set(Var1 "This is variable 1" PARENT_SCOPE)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-11-05
    • 2021-12-17
    • 1970-01-01
    • 1970-01-01
    • 2017-03-27
    • 2016-05-31
    • 2022-08-14
    相关资源
    最近更新 更多