Doxygen 记录所有条件定义

问题描述 投票:0回答:2

我有一个项目,其中有大量的条件定义,可以使跨平台开发变得更容易。然而,我在说服 Doxygen 提取所有定义时遇到了问题,因为它只会提取那些恰好评估的定义。

例如,在以下代码片段中,Doxygen 将记录

TARGET_X86_64
但不记录
TARGET_ARM64

#if defined(_M_ARM64) || defined(__arm64__) || defined(__aarch64__)
/** Build target is ARM64 if defined. */
#define TARGET_ARM64
#else
/** Build target is x86_64 if defined. */
#define TARGET_X86_64
#endif

启用 EXTRACT_ALL 没有帮助,禁用预处理会导致 Doxygen 根本不记录任何内容。如何让 doxygen 提取这两种情况的文档?

c c-preprocessor doxygen
2个回答
1
投票

我制定了一个冗长但有效的“解决方案”。当您想要使用

#elseif
语句时,这比仅使用纯
#if
语句要容易得多。虽然两者都可以。

首先,定义一切,不要关心条件逻辑。

/** Some define */
#define TARGET_DEFINE

/** Some other define */
#define OTHER_TARGET_DEFINE

其次,采用最初用于创建定义的条件逻辑并将其转换为取消定义逻辑。

#if !(ORIGINAL_LOGIC)
#undef TARGET_DEFINE
#endif

最后,更改条件逻辑,以便 doxygen 进行预处理时没有未定义的内容。

#if !defined(DOXYGEN)
...

0
投票

我喜欢马克·阿尔夫的想法补充:

PREDEFINED = IN_DOXYGEN

在doxygen配置文件中。那么你可以简单地使用条件逻辑并且没有冗余数据:

#if defined(_M_ARM64) || defined(__arm64__) || defined(__aarch64__) || defined(IN_DOXYGEN)
/*! \brief Build target is ARM64 if defined. */
#define TARGET_ARM64
#endif

#if !(defined(_M_ARM64) || defined(__arm64__) || defined(__aarch64__)) || defined(IN_DOXYGEN)
/*! \brief Build target is x86_64 if defined. */
#define TARGET_X86_64
#endif
© www.soinside.com 2019 - 2024. All rights reserved.