【发布时间】:2018-04-19 16:52:39
【问题描述】:
在我们的项目中,我们经常使用 boost。所以find_package(Boost ...) 经常被不同的组件调用(对于不同的模块/库)。这会导致很多 "Imported targets not available" 警告(真的很多)
我想避免所有这些日志混乱,而不是在升级 boost 时强制所有用户升级 CMake。我可以假设更新的增强版本很好。但是没有什么可以禁用此警告或仅显示一次。
所以我的想法是包装find_package(Boost ...) 并简单地返回一个状态。最简单的方法似乎是创建一个自定义FindBoost.cmake 并将其放入CMAKE_MODULE_PATH。但是我将如何调用原始的 boost 查找模块呢?如果我再次调用find_package(Boost ...),它可能会再次调用同一个模块。
另外:收集要传递的参数可能会很麻烦。有没有一种自动的方式来做到这一点(比如ARGN 用于常规功能)?
注意:不应该考虑使用自定义宏 find_boost 的明显解决方案,因为它涉及更改所有调用者。
【问题讨论】:
-
“我可以假设更新的 boost 版本没问题。” - 如果
FindBoost.cmake脚本早于 Boost 版本,则可能是有关 Boost 组件之间不满足依赖关系的错误。所以忽略像Imported targets not available这样的警告可能会导致意外的编译/链接失败。 -
我们仍然需要支持旧的 boost 和 CMake 版本。所以我们使用的是变量,而不是导入的目标并自己管理依赖项。必须以与该问题无关的方式处理该假设的含义。
-
Easiest way seems to create a custom FindBoost.cmake and put it in CMAKE_MODULE_PATH. But how would I then call into the original boost find-module?- 恢复CMAKE_MODULE_PATH并调用include(FindBoost.cmake)。实际上,我不明白你为什么需要链接FindBoost.cmake:你可以将原始脚本复制到“自定义”脚本中,然后从中删除message(WARNING)。 -
@Tsyvarev 这个想法非常好。事实上,您可以取消设置
CMAKE_MODULE_PATH并在包含后恢复它。而且您的第二个提示也是正确的,因为即使包装和设置 QUIET 也不会消除警告。您可以将其转换为答案以便我接受吗?