c++ - 子目录之间的 CMAKE 共享变量
问题描述
我正在尝试从foo
(见下文)一个在bar
. 我在 SO 上观察到的方法是添加CACHE INTERNAL
到SET
. 它有效,但我必须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 。再次运行它,预期值将填充到变量中。怎么了?MESSAGE
BarPath
解决方案
Foo/CMakeLists.txt
由cmake
before执行Bar/CMakeLists.txt
。
当你第一次运行时cmake
:
${BarPath}
未定义并将Foo/CMakeLists.txt
其打印为空。${BarPath}
由 定义和缓存Bar/CMakeLists.txt
。
当你第二次运行它时:
${BarPath}
通过Foo/CMakeLists.txt
打印在缓存中找到它。${BarPath}
由 重新定义和缓存Bar/CMakeLists.txt
。
推荐阅读
- python - ArrayField 的 Django 默认值是可调用的,但我仍然收到警告?
- postman - 当我在本地 (Linux) neman html 报告生成上运行它时,接收找不到“htmlextra”报告器
- reactjs - 如何在反应虚拟化的 MultiGrid 列中创建列下拉菜单,如 Excel?
- knex.js - Knex 查询生成器 `where` 和 `andWhere` 有条件地添加差异?
- perl - perl-5.12.3 上的 utf8::all 不起作用,我无法卸载它
- python - 如果 Python 中有特殊字符,如何使用循环拒绝用户输入
- javascript - 在 Angular 12 中检测浏览器或选项卡关闭并使用 MatDialog 进行确认
- woocommerce-bookings - Woocommerce 预订未完成订单
- powershell - 创建 MSOutlook Com-Object 并使其可见
- r - 将 R 数据框中的所有值替换为“NA”