gpt4 book ai didi

c++ - CMAKE 在子目录之间共享变量

转载 作者:搜寻专家 更新时间:2023-10-31 02:05:04 26 4
gpt4 key购买 nike

我正在尝试从 foo(见下文)访问一个在 bar 中计算的变量。我在 SO 上观察到的方法是将 CACHE INTERNAL 添加到 SET。它有效,但我必须两次调用 GNU Make 文件的生成。看起来第一次运行时变量不在缓存中,所以我只得到一个空值。

结构

CMakeList.txt (top)--
|
-- CMakeList.txt (foo)
|
-- CMakeList.txt (bar)

内容顶CMakeList.txt

...
...
ADD_SUBDIRECTORY(foo)
ADD_SUBDIRECTORY(bar)
...
...

Foo CMakeList.txt

...
...
TARGET_INCLUDE_DIRECTORIES(MyProject SYSTEM PRIVATE
${BarPath}
)
MESSAGE(STATUS "Bar include path " ${BarPath})
...
...

栏CMakeList.txt

...
...
SET(BarPath ${CMAKE_CURRENT_BINARY_DIR} CACHE INTERNAL "Path to generated files.")
...
...

然后当我运行 cmake -DCMAKE_BUILD_TYPE=Debug -DCMAKE_INSTALL_PREFIX= 时。 -G "CodeBlocks - Unix Makefiles" 来自 Foo 文件的 MESSAGE 返回空 BarPath。再次运行它,预期值将填充到变量中。怎么了?

最佳答案

Foo/CMakeLists.txtcmakeBar/CMakeLists.txt 之前执行。

当您第一次运行 cmake 时:

  1. ${BarPath} 未定义,Foo/CMakeLists.txt 将其打印为空。
  2. ${BarPath}Bar/CMakeLists.txt 定义和缓存。

第二次运行时:

  1. ${BarPath} 在缓存中被 Foo/CMakeLists.txt 打印出来。
  2. ${BarPath}Bar/CMakeLists.txt 重新定义和缓存。

关于c++ - CMAKE 在子目录之间共享变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52518430/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com