You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

CMake中GRAPHVIZ_CUSTOM_TARGETS选项无法显示自定义目标问题排查

问题原因及解决办法

你的问题出在两个核心点上:

1. 自定义目标依赖的是文件路径而非目标本身

你当前的自定义目标依赖的是${CMAKE_BINARY_DIR}/dummy_bin这个具体文件路径,但CMake的GraphViz依赖图默认追踪的是目标间的依赖关系,而非文件级依赖。这种情况下GraphViz无法识别到自定义目标与可执行目标的关联,自然不会将其加入到生成的图中。

修改方法:把依赖项换成目标名dummy_bin,而非文件路径:

add_custom_target(dummy_custom DEPENDS dummy_bin COMMENT "FOO")

2. GRAPHVIZ_CUSTOM_TARGETS变量未正确设置为缓存变量

你直接用set(GRAPHVIZ_CUSTOM_TARGETS TRUE)设置的是普通变量,但CMake生成GraphViz图时读取的是缓存变量。可以通过两种方式修正:

方法一:在CMakeLists.txt中声明缓存变量

修改set命令,添加缓存变量声明:

cmake_minimum_required(VERSION 3.31)
set(GRAPHVIZ_CUSTOM_TARGETS TRUE CACHE BOOL "Include custom targets in GraphViz output")
project("Dummy" LANGUAGES C)

add_executable(dummy_bin dummy.c)
add_custom_target(dummy_custom DEPENDS dummy_bin COMMENT "FOO")

方法二:运行cmake时通过参数传递缓存变量

保持原有CMakeLists.txt不变,执行cmake命令时添加-D参数指定缓存变量:

mkdir build  
cmake -DGRAPHVIZ_CUSTOM_TARGETS=TRUE --graphviz=foo.dot ..
dot -Tsvg -o foo.svg foo.dot

完成以上修改后重新执行命令,生成的依赖图中就会显示dummy_custom目标,同时能看到它与dummy_bin的依赖关系。

内容的提问来源于stack exchange,提问作者learning2code

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 03:56:03