cmake - 使用 CMake,如何识别目标的依赖项
问题描述
我有一个构建为多种口味的库。这些不同的风格(GUI/CLI 和共享/静态的组合)不完整且命名不一致。在修复此问题时,不再使用原始目标名称。
该库作为许多其他项目的外部引入。为了避免让人们感到不安和让他们感到困惑,我使用输出有用错误消息的原始名称创建了“虚拟”目标。我还设置了该EXCLUDE_FROM_ALL
属性,以便这些虚拟目标仅在它们在某处明确使用时才会被构建。
add_library(Utilities STATIC IMPORTED GLOBAL)
set_target_properties(Utilities PROPERTIES
IMPORTED_LOCATION "${CMAKE_CURRENT_BUILD_DIR}/Utilities.warning"
INTERFACE_INCLUDE_DIRECTORIES "${CMAKE_CURRENT_SOURCE_DIR}/inc"
EXCLUDE_FROM_ALL TRUE
)
add_custom_command(OUTPUT "${CMAKE_CURRENT_BUILD_DIR}/Utilities.warning"
COMMAND ${CMAKE_COMMAND} -E cmake_echo_color --red "The 'Utilities' target has been replaced by 'Utilities_shared'. Please update your CMakeLists.txt."
COMMAND ${CMAKE_COMMAND} -E false
)
add_custom_target(Utilities_fail DEPENDS "${CMAKE_CURRENT_BUILD_DIR}/Utilities.warning")
add_dependencies(Utilities Utilities_fail)
到目前为止一切顺利,一切都很好......除了当这些虚拟目标之一被击中时,我不知道它是从哪里包含的。我们的项目包括许多库,其中一些也使用这个特定的库。我想更新打印的错误消息,以确定需要更新哪些CMakeLists.txt。例如:
The 'Utilities' target has been replaced by 'Utilities_shared'. Please update the 'other_library' CMakeLists.txt.
甚至:
The 'Utilities' target has been replaced by 'Utilities_shared'. Please update /home/Me/Work/MyProject/libs/OtherLib/CMakeLists.txt.
是否有 CMake 生成器表达式或其他方式,我可以识别该目标所依赖的“祖先”目标?如果它包含在多个地方,我只真正关心“第一个”。
解决方案
推荐阅读
- excel - 此选择无效。确保复制和粘贴区域不重叠
- java - 调用 @Test 注释时出错 - Java 新手 - 刚刚开始
- java - 如何配置 Thymeleaf 模板位置
- php - 如何在 PHP Simple XML 中集成一个链接来解析
- java - 如何在JTable(JAVA)中显示FK ID的引用
- css - 如何在Foundation XY-grid(flexbox)中均匀分布单元格高度
- deep-learning - 关于二维人体姿态检测的两个问题
- python - 使用 pandas.read_csv 时如何忽略一些不在引号内的逗号?
- marker - Mapbox GL JS 标记超出地图
- android - 更新数据库后刷新活动或列表视图