使doxygen doxument成为#ifdef部分

gsa*_*ras 7 c++ doxygen c-preprocessor

正如这里建议的那样,我的代码中有一些部分是由编译标志启用的.

例如,我有这段代码:

#ifdef MYPROJ_HAS_BOOST
  ...
#endif
Run Code Online (Sandbox Code Playgroud)

Doxygen会将它们排除,因为它们被省略,因为MYPROJ_HAS_BOOST没有定义.我解决了它,添加了一个#define MYPROJ_HAS_BOOST.

然而这并不好,因为将来(我计划扩展项目),当重新生成我的文档时,也许我会忘记这一点.

有没有办法说Doxygen(理想情况下通过doxywizard)也考虑到我的代码的这些部分?

afe*_*ter 9

我想你只需要通过设置在所有禁用预处理ENABLE_PREPROCESSING,以NO在doxygen的配置文件.

doxywizard转到专家 - >预处理器,你会发现ENABLE_PREPROCESSING.只需取消选中即可将其设置为NO.

有关doxygen预处理的更多信息,请参见此处的文档.


ran*_*ame 8

在你的Doxyfile(或你重命名为它的任何东西)中添加线条

PREDEFINED = MYPROJ_HAS_BOOST
Run Code Online (Sandbox Code Playgroud)

您也可以通过将变量设置PREDEFINED为include来在doxywizard中执行此操作MYPROJ_HAS_BOOST.


mus*_*ach 8

我今天的理解是,doxygen 支持定义。在您的情况下,您应该启用

ENABLE_PREPROCESSING = YES
Run Code Online (Sandbox Code Playgroud)

并设置

PREDEFINED = MYPROJ_HAS_BOOST
Run Code Online (Sandbox Code Playgroud)

或者

PREDEFINED = MYPROJ_HAS_BOOST=1
Run Code Online (Sandbox Code Playgroud)

如果您想反转它(如您在示例中想要的那样)更改为

PREDEFINED = MYPROJ_HAS_BOOST=0
Run Code Online (Sandbox Code Playgroud)

是在这里更详细地解释。


usr*_*567 5

Doxygen定义了DOXYGEN可以使用的宏。

#if defined(MYPROJ_HAS_BOOST) || DOXYGEN
  ...
#endif
Run Code Online (Sandbox Code Playgroud)

如果您有很多宏,则添加Doxygen宏然后将其与Doxyfile中的宏同步可能会更容易。