我正在尝试从 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.txt
由 cmake
在 Bar/CMakeLists.txt
之前执行。
当您第一次运行 cmake
时:
${BarPath}
未定义,Foo/CMakeLists.txt
将其打印为空。${BarPath}
由Bar/CMakeLists.txt
定义和缓存。
第二次运行时:
${BarPath}
在缓存中被Foo/CMakeLists.txt
打印出来。${BarPath}
被Bar/CMakeLists.txt
重新定义和缓存。
关于c++ - CMAKE 在子目录之间共享变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52518430/