Doxygen文档所有条件定义

Bla*_*iwi 5 c doxygen c-preprocessor

我有一个项目,我有大量的条件定义,使跨平台开发更容易.但是我在说服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
Run Code Online (Sandbox Code Playgroud)

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

Bla*_*iwi 1

我制定了一个冗长但有效的“解决方案”。当您想要使用#elseif语句时,这比仅使用纯#if语句要容易得多。尽管两者都可以。

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

/** Some define */
#define TARGET_DEFINE

/** Some other define */
#define OTHER_TARGET_DEFINE
Run Code Online (Sandbox Code Playgroud)

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

#if !(ORIGINAL_LOGIC)
#undef TARGET_DEFINE
#endif
Run Code Online (Sandbox Code Playgroud)

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

#if !defined(DOXYGEN)
...
Run Code Online (Sandbox Code Playgroud)