как заставить doxygen игнорировать макросы, подобные функциям, при создании документации?


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

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

#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

Я получаю следующее:

Скриншот http://i39.tinypic.com/2rf583c.png

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

2 4

2 ответа:

Вариант 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.

Один из способов достичь этого-использовать команду \cond-@cond 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;
}