我正在尝试从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})
...
...
Bar 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
。再次运行,期望值将填充到变量中。怎么了?
答案 0 :(得分:2)
Foo/CMakeLists.txt
由cmake
在Bar/CMakeLists.txt
之前执行。
首次运行cmake
时:
${BarPath}
未定义,Foo/CMakeLists.txt
将其打印为空。${BarPath}
由Bar/CMakeLists.txt
定义和缓存。第二次运行时:
${BarPath}
在缓存中找到Foo/CMakeLists.txt
。${BarPath}
由Bar/CMakeLists.txt
重新定义并缓存。