如何修改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
相关产品推荐
相关产品推荐

