Условная компиляция Doxygen не создает документацию

Я относительный новичок в doxygen и документирую программу на C.

Часть кода:

\#include "options.h"
// options.h contains
\#define VAL0 0   // Possible values for PARAM
\#define VAL1 1
\#define PARAM VAL0

// Here's the conditional compilation
\#if (PARAM == VAL0)
// code chunk, which doesn't get compiled by Doxygen
\#endif

Код компилируется с помощью GCC, как и ожидалось, но я не получаю документацию по Doxygen.

Хорошо, Doxygen не расширяет макросы, поэтому я попробовал:

\#define SYMEQ(A, B) (A == B) ? 1 : 0

\#if SYMEQ(PARAM, VAL0)

// code chunk

\#endif

Установите Доксиген:

MACRO_EXPANSION = ДА

EXPAND_ONLY_PREDEF = ДА

Нет предопределенных макросов

EXPAND_AS_DEFINED = SYMEQ

Никакого doxygen вывода из условной части, только до него

Я также пробовал EXPAND_AS_DEFINED SYMEQ (A, B)

Тоже не повезло

Я нашел несколько примеров с простыми именами, затем #ifdef NAME \code #endif, но ни одного с макрофункциями.


person Jeremy Royston    schedule 12.10.2011    source источник


Ответы (2)


У меня просто была проблема #ifdef CONDITION \code not compiled by doxygen\ #endif и я исправил ее методом грубой силы, т.е. добавив условия к настройке PREDEFINED=CONDITION1 CONDITION2 ... вручную.

Я попробовал решение для файла заголовка - сгенерировать файл с условиями и включить его, установив SEARCH_INCLUDES, INCLUDE_PATH и INCLUDE_FILE_PATTERNS, но это не сработало. Из руководства по doxygen я думаю, что требуется явно #include "the condition file" в исходных файлах , что означает изменить исходный код, поэтому я сдаюсь.

SEARCH_INCLUDES: если для тега SEARCH_INCLUDES установлено значение YES (по умолчанию), включаемые файлы в INCLUDE_PATH (см. ниже) будут искаться, если будет найден #include.

person Wen    schedule 27.07.2012

MACRO_EXPANSION и EXPAND_ONLY_PREDEF управляют только тем, будет ли макрос развернут в вашем коде, а не тем, как он будет оцениваться в условных блоках препроцессора. Например, если у вас есть такой код:

#define RET_TYPE int

/**
 * Some function
 */
RET_TYPE func(void);

С MACRO_EXPANSION=NO это будет документировано doxygen как RET_TYPE func(void), макрос не раскрывается. С MACRO_EXPANSION=YES это будет задокументировано как int func(void), макрос будет расширен, а результирующая подпись будет задокументирована.

Чтобы управлять условным кодом, вам нужно сосредоточиться на ENABLE_PREPROCESSING. Если для этой опции установлено значение NO, условный код будет игнорироваться, а весь код внутри условия будет задокументирован. Если установлено значение YES, будет оцениваться условный код, и документироваться будут только те блоки, для которых условие соответствует. В этом случае вам необходимо убедиться, что все оцениваемые значения определены правильно. Этого можно добиться, разрешив doxygen оценивать включаемые файлы (см. параметры SEARCH_INCLUDES, INCLUDE_PATH и INCLUDE_FILE_PATTERNS) или предварительно определив макросы определенное значение (см. PREDEFINED).

person DRH    schedule 28.12.2011