首页 > 解决方案 > 子目录之间的 CMAKE 共享变量

问题描述

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

结构

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

内容 Top 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.")
...
...

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

标签: c++cmake

解决方案


Foo/CMakeLists.txtcmakebefore执行Bar/CMakeLists.txt

当你第一次运行时cmake

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

当你第二次运行它时:

  1. ${BarPath}通过Foo/CMakeLists.txt打印在缓存中找到它。
  2. ${BarPath}由 重新定义和缓存Bar/CMakeLists.txt

推荐阅读