【发布时间】:2018-03-05 11:19:59
【问题描述】:
CMake 支持表达式if(TARGET target-name) 来检查目标target-name 是否实际存在。有没有类似的东西来检查一个给定名称的 CMake component 是否存在?我找不到if(COMPONENT ...)。
我的用例是我们有 CMake install-foo 目标,将目标 foo 安装到 <CMAKE_INSTALL_PREFIX>。我们还有自定义的 cmake 函数来声明 install-foo 目标所依赖的组件,当您“构建”这样的 install-foo 目标时,这不仅会安装目标本身,还会安装它所依赖的所有组件。
但我们目前无法检查目标所依赖的组件是否实际存在(安装不存在的组件只会静默失败)。因此开发者可以轻松地重命名组件,而无需更新依赖目标,从而打破安装依赖,导致部署不完整。
【问题讨论】:
-
“CMake 组件”是什么意思?一,由
install命令的COMPONENT 选项指定?还是什么? -
@Tsyvarev 是的,完全正确。
-
嗯,但是 CMake 组件 存在 是什么意思?在
install命令一个只是引用 某个组件,CMake 代码不定义 组件。 [这与 targets 相反,后者实际上是在 CMake 代码中定义。] 此外,组件仅在 CPack 中具有意义。您能否详细说明您的问题,为什么您需要组件检查?你想用它实现什么? -
@Tsyvarev 完成。
-
我不知道如何从 CMake 脚本中检查,但您可以使用 grep 脚本
cmake_install.cmake,它实际上执行安装。因为这个脚本可能会执行per-component installation,所以它应该包含所有使用的组件。
标签: cmake