#documentation #typedef #doxygen #conditional-compilation
#Документация #typedef #doxygen #условная компиляция
Вопрос:
Я разрабатываю кроссплатформенную библиотеку. Некоторые фрагменты кода зависят от платформы, поэтому я должен разделить их с помощью #ifdef
, проверяя тип платформы. Я разделил один класс на два класса, каждый для своей платформы. У этих классов разные имена, но, наконец, мне нужно typedef
привести эти классы к одному типу в зависимости от платформы:
#ifdef UNIX
/** some comment */
typedef Key_unix Key;
#elif WIN
/** another comment */
typedef Key_win Key;
#endif
Сгенерированная документация показывает только первый typedef
с обоими комментариями. Как я могу показать оба typedef
кода вместе, каждый со своим собственным комментарием?
Ответ №1:
Насколько я понимаю, у doxygen есть свой собственный препроцессор, который будет оценивать #ifdefs . Вы можете определять макросы с помощью PREDEFINED
опции.
# The PREDEFINED tag can be used to specify one or more macro names that
# are defined before the preprocessor is started (similar to the -D option of
# gcc). The argument of the tag is a list of macros of the form: name
# or name=definition (no spaces). If the definition and the = are
# omitted =1 is assumed. To prevent a macro definition from being
# undefined via #undef or recursively expanded use the := operator
# instead of the = operator.
Однако, поскольку у вас есть #elif, даже если вы установите PREDEFINED = UNIX WIN
, он будет оценивать только первый #ifdef. В качестве альтернативы вы всегда можете попробовать:
#ifdef UNIX
/** some comment */
typedef Key_unix Key;
#endif
#ifdef WIN
/** another comment */
typedef Key_win Key;
#endif
Маловероятно, что при компиляции кода у вас будут определены как UNIX, так и WIN.
Комментарии:
1. Спасибо за ответ. Я пробовал ваш альтернативный код с ПРЕДОПРЕДЕЛЕННОЙ опцией и без нее, но, к сожалению, он не сработал. Я думаю, что проблема не в макросах, а в дублирующемся коде — typedef того же типа. Doxygen достигает обоих, потому что используются оба комментария. На самом деле мой вопрос заключается в том, есть ли какая-либо опция Doxygen, позволяющая дублировать код в документе.
2. Ах, да, я понимаю, что вы имеете в виду. Я не знаю способа заставить doxygen документировать повторяющиеся typedef так, как вы просите.