自定义目标的CMake依赖图

7

--graphviz选项是否应该获取自定义目标的依赖关系?

示例CMakeLists.txt文件:

cmake_minimum_required(VERSION 2.8)
add_executable(target0 test.cpp)
add_dependencies(target0 target1)
add_custom_target(target1 ALL
  COMMAND echo hello
)

"cmake --graphviz=test.dot ." 的输出文件将会是:

test.dot

digraph GG {
node [
  fontsize = "12"
];
    "node3" [ label="target0" shape="house"];
}

没有任何 target1 的痕迹。


4
在创建目标之前使用add_dependencies?这样做CMake会不会报错? - Tsyvarev
确实是个好发现,看起来很奇怪,但我的CMake并没有抱怨。不管怎样,将add_dependencies放在文件末尾并没有什么区别。 - Demetrius
2
你的CMake版本是多少? - usr1234567
可以在CMake 2.8.12.2上重现。 - Kamiccolo
2个回答

6

CMake手册明确指出:

--graphviz=[file]

生成一个graphviz输入文件,其中包含项目中所有库和可执行文件的依赖关系。有关更多详细信息,请参见CMakeGraphVizOptions.cmake文档。

因此,据我所知,您自定义的目标既不是-也不是库,也不是可执行文件,不能包括在生成的图形中。


3
由于我刚刚开始使用cmake,很难从构建图的角度理解可执行目标和自定义目标之间的区别。 - Demetrius

3

对于一些人来说,这可能是一个困扰。

使用CMake 3.17,现在可以包含自定义目标
https://cmake.org/cmake/help/v3.17/module/CMakeGraphVizOptions.html (相关问题 17960)

GRAPHVIZ_CUSTOM_TARGETS

    将其设置为TRUE以在生成的图形中包括自定义目标。
        必填:否
        默认值:FALSE

GRAPHVIZ_IGNORE_TARGETS

    排除在生成的图形中的目标名称的正则表达式列表。
        必填:否
        默认值:空


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接