Doxygen: автоссылка макросов и элементов перечисления

Я использую doxygen 1.8.8 для документирования проекта C, у меня AUTOLINK_SUPPORT установлено на YES.

Скажем, у меня есть макрос, задокументированный следующим образом:

/**
 * My macro
 */
#define MY_MACRO

Затем я упоминаю этот макрос в комментариях для какой-то функции, например:

/**
 * My function uses `MY_MACRO` heavily
 */
void my_func(void) { ... }

В этом случае MY_MACRO не является ссылкой. После долгих экспериментов я нашел несколько способов сделать doxygen ссылкой:

  • укажите это так: \ref MY_MACRO. Мне это не нравится, потому что (а) не так удобно писать и читать в комментариях; (b) шрифт не моноширинный. Я пытался комбинировать это с обратными кавычками, это не работает;
  • укажите это так: MY_MACRO(). Мне это не нравится, потому что, очевидно, эти скобки предполагают, что макрос параметризован, но это не так;
  • укажите его внизу комментария, например: @see MY_MACRO. Мне это не нравится, потому что неудобно читать, было бы намного лучше, если бы макрос ссылался в строке.

Итак, как сделать так, чтобы на него ссылались только в комментарии к функции?

UPD: мой доксифайл: http://goo.gl/olkjV0


person Dmitry Frank    schedule 27.09.2014    source источник
comment
Каковы настройки для ENABLE_PREPROCESSING, MACRO_EXPANSION, PREDEFINED, EXPAND_ONLY_PREDEF, EXPAND_AS_DEFINED.   -  person Rich    schedule 28.09.2014
comment
@Rich ENABLE_PREPROCESSING=YES, MACRO_EXPANSION=NO, PREDEFINED=DOXYGEN_SHOULD_SKIP_THIS, EXPAND_ONLY_PREDEF=NO, EXPAND_AS_DEFINED пуст. Я обновил свой вопрос: добавил ссылку на полный doxyfile   -  person Dmitry Frank    schedule 28.09.2014
comment
Странно, такого поведения я еще не видел. Возможно, отключение SKIP_FUNCTION_MACROS исправит это?   -  person Rich    schedule 28.09.2014
comment
@Rich нет, ничего не изменилось. Вы имеете в виду, что для ваших проектов элементы перечисления и непараметризованные макросы автоматически связываются? Если да, не могли бы вы поделиться своим doxyfile и, возможно, проектом, если у вас есть что-то с открытым исходным кодом?   -  person Dmitry Frank    schedule 28.09.2014
comment
Придется покопаться - тут у меня память слабовата. Doxygen ведет себя по-другому, если MY_MACRO имеет явное значение?   -  person Rich    schedule 28.09.2014
comment
@Rich, нет, поведение такое же. На самом деле он автоматически связывает только структуры данных (например, для struct MyStruct MyStruct является ссылкой) и символы с закрывающими скобками (т. е. функции и параметризованные макросы). Но имена перечислений, имена элементов перечислений, непараметризованные макросы, определения типов не связываются автоматически.   -  person Dmitry Frank    schedule 28.09.2014


Ответы (1)


Как указано в документах по автоссылке, мы должны добавить имя макроса, элемент перечисления или имя перечисления. с #:

/**
 * My function uses `#MY_MACRO` heavily
 */
void my_func(void) { ... }

Затем MY_MACRO становится ссылкой.

person Dmitry Frank    schedule 29.09.2014
comment
Я пропустил комментарий doxygen к моей константе. Это сложно! (Кроме того, чтобы мои ссылки на функции в файле C работали, мне нужен комментарий @file вверху) - person thomasa88; 06.05.2020