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

CMake如何创建依赖生成文件的自定义目标?

解决方案

要实现仅在构建自定义目标doc时才生成conf.py,你需要把configure_file的生成逻辑从配置阶段转移到构建阶段,具体通过add_custom_command来实现,再让自定义目标依赖该命令的输出文件。

修改后的CMake代码

# 用自定义命令生成conf.py,仅在依赖它的目标需要时执行
add_custom_command(
  OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/conf.py
  COMMAND ${CMAKE_COMMAND} -E configure_file
    ${CMAKE_CURRENT_SOURCE_DIR}/conf.py.in
    ${CMAKE_CURRENT_BINARY_DIR}/conf.py
    @ONLY  # 保持原configure_file的变量替换行为,根据你的需求可选
  MAIN_DEPENDENCY ${CMAKE_CURRENT_SOURCE_DIR}/conf.py.in
)

# 自定义文档目标,依赖生成的conf.py
add_custom_target(doc
  COMMAND ${SPHINX_EXECUTABLE} -b html ${SPHINX_SOURCE} ${SPHINX_BUILD}
  WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
  COMMENT "Generating documentation with Sphinx"
  DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/conf.py
)

关键说明

  • add_custom_command的作用:将conf.py的生成动作延迟到构建阶段,只有当依赖它的doc目标被触发时(比如执行make doc或cmake --build . --target doc),才会检查conf.py是否需要更新:如果文件不存在、模板conf.py.in有修改,或者CMake变量有变化,才会重新生成conf.py。
  • 替代直接configure_file的原因:原代码中的configure_file是在CMake配置阶段(运行cmake ..时)无条件执行的,无法通过目标依赖控制生成时机。而add_custom_command是构建阶段的动作,完全由目标依赖关系触发。
  • MAIN_DEPENDENCY:指定模板文件conf.py.in为主要依赖,确保模板修改时自动重新生成conf.py。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 06:42:15