Документирование препроцессора определяет в Doxygen - PullRequest
22 голосов
/ 01 марта 2010

Можно ли документировать определения препроцессора в Doxygen? Я ожидал, что смогу сделать это точно так же, как переменную или функцию, однако вывод Doxygen, похоже, «потерял» документацию по определению и также не содержит самого определения.

Я попробовал следующее

/**My Preprocessor Macro.*/
#define TEST_DEFINE(x) (x*x)

и

/**@def TEST_DEFINE

   My Preprocessor Macro.
*/
#define TEST_DEFINE(x) (x*x)

Я также пытался поместить их в группу (пробовал defgroup, addtogroup и ingroup), а не просто в «область действия файла», однако это тоже не имело никакого эффекта (хотя другие элементы в группе были задокументированы как и предполагалось).

Я просмотрел различные опции Doxygen, но не увидел ничего, что включило бы (или предотвратило) документирование определений.

Ответы [ 4 ]

29 голосов
/ 01 марта 2010

Да, это возможно. Документация Doxygen гласит:

Для документирования глобальных объектов (функций, typedefs, enum, макросов и т. Д.), Вы должны документировать файл, в котором они определены. Другими словами, должно быть хотя бы

/*! \file */

или

/** @file */

строка в этом файле.

Вы можете использовать @defgroup, @addtogroup и @ingroup для помещения связанных элементов в один и тот же модуль, даже если они появляются в отдельных файлах (подробности см. В документации здесь ). Вот минимальный пример, который работает для меня (с помощью Doxygen 1.6.3):

Doxyfile

# Empty file.

test.h

/** @file */

/**My Preprocessor Macro.*/ 
#define TEST_DEFINE(x) (x*x) 

/**
 * @defgroup TEST_GROUP Test Group
 *
 * @{
 */

/** Test AAA documentation. */
#define TEST_AAA (1)
/** Test BBB documentation. */
#define TEST_BBB (2)
/** Test CCC documentation. */
#define TEST_CCC (3)
/** @} */

foo.h

/** @file */

/**
 * @addtogroup TEST_GROUP
 *
 * @{
 */

/** @brief My Class. */     
class Foo {
    public:
        void method();
};

/** @} */

bar.h

/** @file */

/**
 * @ingroup TEST_GROUP
 * My Function.
 */
void Bar();

В этом случае документация TEST_DEFINE появляется в записи Test.h на вкладке Файлы в выводе HTML, а определения TEST_AAA и т. Д. Отображаются в Группа испытаний на вкладке Модули вместе с классом Foo и функцией Bar.

Следует отметить, что если вы поставите имя файла после команды @file, например:

/** @file Test.h */

тогда это должно соответствовать фактическому имени файла. Если этого не произойдет, документация для элементов в файле не будет создана.

Альтернативное решение, если вы не хотите добавлять @file команды, это установить EXTRACT_ALL = YES в вашем Doxyfile.

Надеюсь, это поможет!

4 голосов
/ 01 мая 2010

В моих файлах "C" я использую формат комментария и строку #define, например:

/** @brief Number of milli-seconds to wait*/
#define kTimeoutMSec (2)

Мои HTML-документы в конечном итоге содержат указанную мной документацию. (У меня есть @file в верхней части файла и EXTRACT_ALL = YES)

3 голосов
/ 01 марта 2010

Попробуйте установить параметр EXTRACT_ALL, у меня есть этот набор в моем проекте, и он генерирует документацию для #defines. Может быть более элегантный способ сделать это без использования EXTRACT_ALL, поэтому обязательно ознакомьтесь с документацией

http://www.doxygen.nl/config.html#cfg_extract_all

2 голосов
/ 02 января 2018

Добавляя к предыдущим ответам, также необходимо иметь ENABLE_PREPROCESSING=YES в Doxyfile.

...