如何检查CMake是否以--graphviz参数启动?
检测CMake是否使用--graphviz选项并添加依赖目标
CMake本身没有直接提供内置变量来判断是否传入了--graphviz选项,但可以通过以下两种可行方式实现你的需求:
方法1:自定义缓存变量配合命令行参数
- 调用CMake时,除了
--graphviz选项外,额外传入一个自定义缓存变量:cmake .. --graphviz=deps.dot -DUSE_GRAPHVIZ=ON - 在CMakeLists.txt中通过这个变量判断并添加目标:
if(USE_GRAPHVIZ) # 添加依赖于生成的.dot文件的自定义目标 add_custom_target( generate_dep_png COMMAND dot -Tpng deps.dot -o dependency_graph.png DEPENDS deps.dot COMMENT "Generating dependency graph image" ) endif()
方法2:解析CMake命令行参数
CMake提供了CMAKE_COMMAND_LINE_ARGS变量,记录了调用CMake时传入的所有命令行参数。可以通过字符串匹配检测是否包含--graphviz:
# 检查命令行参数中是否包含--graphviz string(FIND "${CMAKE_COMMAND_LINE_ARGS}" "--graphviz" GRAPHVIZ_FLAG_POS) if(NOT GRAPHVIZ_FLAG_POS EQUAL -1) # 在这里添加依赖于.dot输出的目标逻辑 add_custom_target( process_graphviz_output COMMAND ./parse_deps.sh deps.dot DEPENDS deps.dot COMMENT "Processing Graphviz dependency file" ) endif()
提示:这种方式无需额外传入自定义变量,即使
--graphviz带输出文件名参数(如--graphviz=./output.dot),字符串匹配依然能检测到该选项的存在。
内容的提问来源于stack exchange,提问作者Benjamin Buch
相关产品推荐
相关产品推荐

