2015-01-08 5 views
2

Я документирую свой код C с помощью doxygen. Для лучшей читаемости я группирую документацию по каждой паре файлов .c/.h (иногда также к большему количеству файлов) с defgroup и addtogroup (см. doxygen in c: grouping of defines). Страницы файлов выглядят отлично, но на страницах группы/модуля все переменные документы удваиваются. Для каждой переменной, объявленной (с extern) в файле заголовка и определенной в файле .c, есть 2 записи для каждой (как в сводке, так и в части описания). Функции и все остальное перечислены только один раз ...C и doxygen - удаление дубликатов переменной документации

Как я могу избавиться от документированной переменной документации на страницах группы/модуля?

Мои исходные файлы выглядеть следующим образом: .h файл:

/** @file 
* blabla 
* @author bla 
*/ 
/// @addtogroup MY_GRP 
/// @{ 
#define SOMEDEF1 1 
/// @name Special defs 
/// @{ 
#define SOMEDEF2 2 
/// @} 
enum someenum { 
    foo, 
    bar 
}; 

extern int some_variables; 

extern void some_proc(int baz); 

/// @} 

.c файл:

/** @file 
* blabla 
* @author bla 
*/ 
/** @defgroup MY_GRP A test group. 
    * Description 
    */ 
/// @{ 
#include "my.h" 

/// Important variable. 
int some_variable; 

/** Important proc 
* Description 
* @param baz need this 
*/ 
void some_proc(int baz) { 
// code 
} 

/// @} 
+0

Из любопытства, почему вы объявляете 'some_proc()' через extern, а также 'some_viarables()'? Этот extern на 'some_proc()' кажется ненужным. Файлы других файлов, которые содержат заголовок, не будут нуждаться в повторном вызове 'some_proc()' через extern в любом случае. – Nick

+0

Вы правы: это не обязательно, но это тоже не наносит вреда. ИМХО становится более ясным и более последовательным. – Bytemaster

ответ

2

Не удалось реально решить эту проблему, но нашел меня workarround: Я использую INPUT_FILTER с grep -Eve "extern" (cygwin), чтобы отсортировать все строки с помощью «внешних» функций или объявлений переменных. Поскольку я только документирую фактические реализации функций и определения переменных, все с «extern» перед ним не имеет документации в любом случае и может быть удалено для doxygen. Это действительно также удаляет все повторяющиеся записи для переменных в doxygen.

+0

Спасибо за отправку решения! Я думал по этим строкам, вызывая скрипт perl, который делает что-то вроде ' = ~ s/extern // g;'. Но я думал то же самое, это звучит как взломать, и что, если вы не хотите фильтровать каждый extern, но, возможно, вы могли бы определить оболочку для externs, которую вы не хотите фильтровать. В качестве альтернативы, вы могли бы использовать процессор doxygen, чтобы сделать что-то подобное, вы могли бы определить символ в doxygen, который активирует код препроцессора, чтобы эффективно перезаписать extern ничем. – Nick

+0

У меня есть вопрос для вас - это также фильтрует то, что попадает в исходный браузер, или нет? Существует опция 'FILTER_SOURCE_FILES', которая может быть связана с этим. – Nick

+0

Для вашего 1-го комментария: действительно, это грязный хак, и лично я думаю, что это похоже на ошибку в doxygen. Я просто удивлен, что у кого-то еще нет этой проблемы. Я попробовал что-то вроде '#ifndef __DOXYGEN', но ничего не сделал. Для вашего второго комментария: Извините, я не использую исходный браузер. Я предполагаю, что фильтр применяется только к коду в браузере исходного кода, если задано 'FILTER_SOURCE_FILES'. – Bytemaster

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