检查是否存在CMake组件

时间:2018-03-05 11:19:59

标签: cmake

CMake支持表达式if(TARGET target-name)来检查目标target-name是否确实存在。有没有类似的东西检查是否存在具有给定名称的CMake 组件?我找不到if(COMPONENT ...)

我的用例是我们有CMake install-foo目标,用于将目标foo安装到<CMAKE_INSTALL_PREFIX>。我们还有自定义cmake函数来声明install-foo目标所依赖的组件,以及何时“构建”这样的install-foo目标,这不仅会安装目标本身,还会安装它所依赖的所有组件上。

但我们目前无法检查目标所依赖的组件是否确实存在(安装不存在的组件只会无声地失败)。因此,开发人员可以轻松地重命名组件而无需更新依赖目标,从而破坏了安装依赖性并导致部署不完整。

1 个答案:

答案 0 :(得分:0)

如果使用CPACK,可以在include(CPack)行之后访问组件列表,如下所示:

include(CPack)

message("DEBUG: List of all components => ${CPACK_COMPONENTS_ALL}")
foreach(component ${CPACK_COMPONENTS_ALL})
    message("INFO - component ${component}")
    message("INFO - ...is part of ${CPACK_COMPONENT_${component}_GROUP}")
endforeach(component)

由于每个组件而安装的文件列表在${CMAKE_BINARY_DIR}中可用:

install_manifest_<COMPONENT>.txt

如果某个组件没有要安装的文件,则相应的install_manifest文件将为空。

使用上述信息集应该可以检查是否有僵尸组件。