【问题标题】:How can I get the list of dependencies of cmake target?如何获取 cmake 目标的依赖项列表?
【发布时间】:2014-02-25 17:10:18
【问题描述】:

例如,我如何知道我的可执行目标 E 是否依赖于我的库目标 L?

让我们想象一下E依赖于L1和L2,但我不知道它们是否依赖于L。

target_link_libraries(E L1 L2)

我想在调用 target_link_libraries 之前从 CMake 本身获取列表,这样如果我检测到 E 依赖于两个不兼容的库,我可以做一些技巧。我用GetPrerequisites 玩了一下,但这会找出磁盘上现有库的依赖关系,而不是正在构建的目标。

谢谢

【问题讨论】:

标签: cmake


【解决方案1】:

您可以使用 CMake 的“依赖图生成器”。请阅读此链接以获取details

cmake --graphviz=test.dot . ...

【讨论】:

  • 要从您的CMakeLists.txt 文件中运行此程序,请参阅此answer
  • 它在我的设置上不起作用,这表明我的代码显然没有依赖关系(节点之间没有箭头)
  • --graphviz 选项仅考虑可执行和库目标,但不考虑自定义目标(如文档所述)。所以它并不总是有用的。
  • 这并没有回答标题中提出的问题,即获取依赖项的列表(即,不是图表)。
  • 这真的很有帮助,谢谢!
【解决方案2】:

虽然 graphviz 输出可能更直观,但可以通过简单的方式启用足够等效的功能

set_property(GLOBAL PROPERTY GLOBAL_DEPENDS_DEBUG_MODE 1)

GLOBAL_DEPENDS_DEBUG_MODE cmake.org help

【讨论】:

    【解决方案3】:

    我有一个顶级项目,其中包含几个外部子项目。在 CMakeLists.txt 文件中, 大多数目标都是自定义的,没有列出 默认在图表中。查看文档 https://cmake.org/cmake/help/latest/module/CMakeGraphVizOptions.html,上面写着,

    GRAPHVIZ_CUSTOM_TARGETS 设置为 TRUE 以在生成的图表中包含自定义目标。

    强制:否

    默认值:假

    要开启它,写一个文件CMakeGraphVizOptions.cmake, 并在其中放入以下行,

    SET(GRAPHVIZ_CUSTOM_TARGETS TRUE)

    希望这会有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-07-01
      • 2014-09-06
      • 1970-01-01
      • 1970-01-01
      • 2011-12-25
      • 2017-12-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多