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

如何修改CMake生成的Makefile默认目标,区分make与make all构建

解决CMake默认目标不包含Doxygen文档的问题

问题描述

你希望用CMake生成Makefile时,执行make默认不构建Doxygen文档,只有make all才会构建全部内容(包括文档)。当前CMake生成的Makefile默认目标绑定到all:

default_target: all
.PHONY : default_target

你的Doxygen相关CMake配置如下:

set(document_files ${.....}/document/html)
add_custom_target(doxygen ALL 
    DEPENDS ${document_files})

# Documentation command 
add_custom_command(OUTPUT ${document_files}
    COMMAND ${DOXYGEN_EXECUTABLE} ${DOXYGEN_OUT}
    COMMAND ${CMAKE_COMMAND} -E touch ${document_files}
    WORKING_DIRECTORY ${.....}/../docs
    COMMENT "Generating API documentation with Doxygen"
    VERBATIM )

解决方案

步骤1:移除Doxygen目标的ALL关键字

原来的add_custom_target(doxygen ALL ...)里的ALL会把doxygen自动加入all目标的依赖,同时让all成为默认目标的依赖。去掉ALL后,doxygen不会自动关联到默认构建流程。

步骤2:让all目标依赖doxygen

通过add_dependencies(all doxygen),确保执行make all时会触发Doxygen文档的构建。

步骤3:重新设置默认目标

CMake默认把all作为默认目标,所以需要创建一个新的默认目标(比如default),只包含你需要的核心构建内容(比如你的应用程序目标),然后把它设为默认构建目标。

修改后的完整配置示例

set(document_files ${.....}/document/html)

# 移除ALL,doxygen不再自动加入默认构建
add_custom_target(doxygen 
    DEPENDS ${document_files})

# 让all目标包含doxygen依赖
add_dependencies(all doxygen)

# Documentation command 保持不变
add_custom_command(OUTPUT ${document_files}
    COMMAND ${DOXYGEN_EXECUTABLE} ${DOXYGEN_OUT}
    COMMAND ${CMAKE_COMMAND} -E touch ${document_files}
    WORKING_DIRECTORY ${.....}/../docs
    COMMENT "Generating API documentation with Doxygen"
    VERBATIM )

# 创建自定义默认目标,替换原来的all作为默认
add_custom_target(default)
# 假设你的核心构建目标是myapp,把它加入default的依赖
add_dependencies(default myapp)
# 设置当前目录的默认构建目标为default
set_property(DIRECTORY PROPERTY DEFAULT_BUILD_TARGET default)

验证效果

  • 执行cmake ..生成Makefile后,运行make只会构建核心目标(比如myapp),不会生成Doxygen文档。
  • 运行make all会构建所有内容,包括Doxygen文档。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 12:18:28