2014-01-21 2 views
4

Мне нужно документировать проект с помощью doxygen, но также нужно игнорировать некоторые макросы, которые я использую для чтения в небольших разделах моего кода, для которых нет смысла появляться в документации.Как сделать doxygen игнорировать функциональные макросы при создании документации?

вот минимальный пример (я в основном использую макросы индексировать некоторый C-стиль 2D или 3D-массивы):

#include <cstring> 
/*! \file notes.cpp 
    \brief A test for macros and doxygen 
*/ 
/// my main function 
int main() 
{ 
    double loc_arr[9][4][4]; 
    memset (loc_arr, 0.0, 144 * sizeof (double)); 
#define BLOCK(i) (&(loc_arr[i][0][0])) 
    for (int ii = 0; ii < 9; ++ii) 
    { 
    memset (BLOCK(ii), double(ii), 16 * sizeof (double)); 
    } 
#undef BLOCK 
    return 1; 
} 

Когда я любовницей его, со следующими параметрами:

ENABLE_PREPROCESSING = YES 
MACRO_EXPANSION  = YES 
EXPAND_ONLY_PREDEF  = NO 
SEARCH_INCLUDES  = YES 
INCLUDE_PATH   = 
INCLUDE_FILE_PATTERNS = 
PREDEFINED    = 
EXPAND_AS_DEFINED  = 
SKIP_FUNCTION_MACROS = YES 

я получаю это:

screenshot http://i39.tinypic.com/2rf583c.png

Обратите внимание, что единственным способом я Коула d избегайте документирования макросов, установив ENABLE_PREPROCESSING = NO, что является проблемой для меня, так как он также исключает график включения в верхней части страницы.

ответ

5

Вариант 1. Вы можете использовать символ препроцессора DOXYGEN_SHOULD_SKIP_THIS, как описано в Doxygen FAQ

How can I make doxygen ignore some code fragment? 

The new and easiest way is to add one comment block with a 
\cond command at the start and one comment block with a 
\endcond command at the end of the piece of code that should be 
ignored. This should be within the same file of course. 

But you can also use Doxygen's preprocessor for this: If you put 

#ifndef DOXYGEN_SHOULD_SKIP_THIS 

/* code that must be skipped by Doxygen */ 

#endif /* DOXYGEN_SHOULD_SKIP_THIS */ 

around the blocks that should be hidden and put: 

    PREDEFINED = DOXYGEN_SHOULD_SKIP_THIS 

in the config file then all blocks should be skipped by Doxygen 
as long as ENABLE_PREPROCESSING is set to YES. 

Вариант 2. Вы можете использовать опцию EXCLUDE_SYMBOLS конфигурации Doxygen.

+4

решение я нашел чистейшие, чтобы окружить макрос '/// @cond Foo' непосредственно перед' #define ... 'и' /// @ endcond' после '# undef'. спасибо @Colin за то, что указали мне в правильном направлении (я только пытался понять, что говорят комментарии в файле doxyfile) – Davide

+0

@ Davide: Можете ли вы расширить это в ответ? – einpoklum

+0

@einpoklum как пожелаете – Davide

2

Одним из способов достижения этой цели является использование команды \[email protected] Doxygen:

#include <cstring> 
/*! \file notes.cpp 
    \brief A test for macros and doxygen 
*/ 
/// my main function 
int main() 
{ 
    double loc_arr[9][4][4]; 
    memset (loc_arr, 0.0, 144 * sizeof (double)); 
/// \cond DO_NOT_DOCUMENT 
#define BLOCK(i) (&(loc_arr[i][0][0])) 
    for (int ii = 0; ii < 9; ++ii) 
    { 
    memset (BLOCK(ii), double(ii), 16 * sizeof (double)); 
    } 
#undef BLOCK 
/// \endcond 
    return 1; 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^