【发布时间】:2015-06-15 19:10:04
【问题描述】:
所以,我们在一个大项目中使用 doxygen。
一些源代码是在构建过程中生成的,
喜欢my_generated_code_fragment.h
在源码中使用,像这样
文件foo.cc
void foo()
{
#include "my_generated_code_fragment.h"
}
现在,当从源代码控制下的存储库运行 doxygen 时,
doxygen 正确地抱怨文件 my_generated_code_fragment.h 丢失,
出现如下错误:
foo.cc:1234:警告:不包含文件 my_generated_code_fragment.h 找到了,也许你忘了把它的目录添加到 INCLUDE_PATH 中?
问题
我们不想先执行完整的构建,只是为了生成缺失的 文件,以便生成文档。 请注意,生成的代码无论如何都不包含 doxygen cmets。
目前考虑的解决方案
- 什么都不做
什么都不做,忽略 doxygen 错误。 不是很满意。
- 生成虚拟文件
在运行之前生成像my_generated_code_fragment.h这样的虚拟文件
氧气。
这会在构建脚本中造成复杂性, “使用 doxygen”现在在不同的项目中有所不同, 因为包含生成代码的文件不同。
- 使用预处理器标志
把代码改成
void foo()
{
#ifndef IN_DOXYGEN
#include "my_generated_code_fragment.h"
#undef IN_DOXYGEN
}
并设置PREDEFINED
这是迄今为止考虑的最佳解决方案,但它意味着更改代码。
问题
有没有更好的选择,比如使用 Doxyfile 中的设置告诉 doxygen
该文件my_generated_code_fragment.h 预计会丢失,
应该忽略吗?
注意:
EXCLUDE 不适用于此,
因为解析文件foo.cc时会看到错误,而不是解析生成的代码时。
目前使用 doxygen 1.8.5 版。
【问题讨论】:
-
我绝不是 doxygen 内部结构方面的专家。但我相信你最好的选择是(3),使用预处理器标志。请告诉我们您是如何解决这个问题的。
标签: doxygen