Условная компиляция Doxygen не дает документации - PullRequest
0 голосов
/ 13 октября 2011

Я относительный новичок с 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

Установить Doxygen:

MACRO_EXPANSION = YES

EXPAND_ONLY_PREDEF = YES

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

EXPAND_AS_DEFINED = SYMEQ

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

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

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

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

Ответы [ 2 ]

2 голосов
/ 27 июля 2012

У меня только что возникла проблема #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.

1 голос
/ 28 декабря 2011

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).

...