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
相关产品推荐
相关产品推荐

