如何使用Doxygen复制未导出C++类的文档且不生成该类文档
问题根因
你使用EXCLUDE_SYMBOLS = A配置排除A类时,Doxygen会在解析阶段直接忽略所有和A类相关的符号定义,包括A类内部的注释内容,所以\copydoc A::someAfunc()找不到对应的源注释,自然无法将内容复制到B类的方法文档中。
可行解决方案
方案1:使用\internal标签(无需调整Doxygen核心解析逻辑,推荐)
- 给A类的类注释添加
\internal标签,示例:
/*! * \internal * \brief A类的类注释 */ class A { // 原有内容不变 };
- 修改Doxygen配置文件,设置
INTERNAL_DOCS = NO
这个方案下Doxygen会正常解析A类的所有内容(保证\copydoc能正常匹配到A类的方法注释),但最终输出的文档里不会展示任何A类的相关内容,完全符合你的需求。
方案2:使用标签文件(无需修改A类源码)
如果不方便改动A类的代码,可以用标签文件的方式实现:
- 先保留原配置(不添加
EXCLUDE_SYMBOLS = A),在配置中新增GENERATE_TAGFILE = project.tag,运行一次Doxygen生成全量文档和标签文件 - 修改配置,新增
EXCLUDE_SYMBOLS = A,同时新增TAGFILES = project.tag,再次运行Doxygen即可
此时Doxygen会从已生成的标签文件中读取A类的注释信息供\copydoc使用,但不会生成A类的文档页面。
方案3:使用预过滤自动添加\internal标签(无需手动修改A类源码)
如果不想改源码也不想跑两次Doxygen,可以配置过滤器自动给A类注入\internal标签:
- 在Doxygen配置中添加
FILTER_PATTERNS = A.h="sed '1s/^/\\/*! \\internal *\\//'"(Linux环境下可直接使用sed命令) - 同步设置
INTERNAL_DOCS = NO即可,效果和方案1完全一致。
以上方案均兼容你使用的Doxygen 1.9.1版本。
内容的提问来源于stack exchange,提问作者Alienpenguin
相关产品推荐
相关产品推荐

