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

如何配置Doxygen与CMake,使生成文档时自动触发构建阶段的头文件生成

概述

我的CMake项目中有部分头文件是在构建过程中自动生成的,我的目标是配置CMakeLists.txt,使得构建项目文档时也能触发头文件生成(无需触发其他构建流程)。基础的CMake/Doxygen配置参考了微软官方C++文档生成教程的初始步骤。

详细信息

本项目的目录结构较为特殊:
目录结构示意图

${CMAKE_SOURCE_DIR}为存放顶层CMakeLists.txt文件的cmake/目录,${CMAKE_BINARY_DIR}为cmake/cmake-build-debug。
目录结构截图1
目录结构截图2

我希望生成的文档存放在cmake/cmake-build-debug/docs路径下,而需要提交到仓库的CMake和Doxygen配置文件则存放在docs/目录中。

涉及的源文件如下:

  • squawk.cpp:
#include "squawk.hpp"

void squawk(const std::string &s) {
    std::cout<<STRFY(SQUAWK)<<": "<<s<<std::endl;
}
  • squawk.hpp:
#include <iostream>
#include <string>

#define STRINGIFY(X) #X
#define STRFY(X) STRINGIFY(X)
#include "squawk.hd"

void squawk(const std::string &s);
  • main.cpp:
#include "squawk.hpp"

int main(int argc, char* argv[]) {

    const std::string s = "Hello World!";
    squawk(s);

    return 0;
}
  • squawk.def:
#define SQUAWK squeal

构建过程中我会基于squawk.def,将其中的squeal替换为caw后保存为squawk.hd,该操作通过sed执行,匹配规则写在squawk.ss中:s/(#define SQUAWK)(.*)/\1 caw/。这就是头文件的生成流程,我希望仅构建文档时也能执行该流程,无需构建squawk二进制文件。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 02:54:07