CMake支持表达式if(TARGET target-name)
来检查目标target-name
是否确实存在。有没有类似的东西检查是否存在具有给定名称的CMake 组件?我找不到if(COMPONENT ...)
。
我的用例是我们有CMake install-foo
目标,用于将目标foo
安装到<CMAKE_INSTALL_PREFIX>
。我们还有自定义cmake函数来声明install-foo
目标所依赖的组件,以及何时“构建”这样的install-foo
目标,这不仅会安装目标本身,还会安装它所依赖的所有组件上。
但我们目前无法检查目标所依赖的组件是否确实存在(安装不存在的组件只会无声地失败)。因此,开发人员可以轻松地重命名组件而无需更新依赖目标,从而破坏了安装依赖性并导致部署不完整。
答案 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文件将为空。
使用上述信息集应该可以检查是否有僵尸组件。