我有很多代码基于来自编译器的定义进行条件编译,而不是代码本身或外部头文件中的任何定义。例如,我经常会遇到如下事项:
#if defined _MSC_VER || defined __ICL
// A lot of freakin code
#elif defined __GNUC__ || defined __ICC
// A bunch more here
#else
#error "Unsupported environment"
#endif
我需要为platofm /编译器特定部分中的所有代码生成文档,但我不能简单地将ENABLE_PREPROCESSING设置为NO,因为根据文档,INCLUDE_GRAPH和INCLUDED_GRAPH必须为YES才能正常工作。
那么,我该怎么做?
答案 0 :(得分:1)
您首先必须在"预定义"中定义宏DOXYGEN
或类似内容。 doxygen配置的一部分。然后,您必须将#elif
拆分为单独的#if
,并跟踪您找到一个有效配置的事实。
#if defined _MSC_VER || defined __ICL || defined DOXYGEN
#define WE_FOUND_SOME
// A lot of freakin code
#endif
#if defined __GNUC__ || defined __ICC || defined DOXYGEN
#define WE_FOUND_SOME
// A bunch more here
#endif
#ifndef WE_FOUND_SOME
# error "Unsupported environment"
#endif
但要注意,如果这些不同的部分定义相同的功能或宏,那么doxygen很容易丢失。