У меня 3 файла:
test.c
int table[] = { #define X(val) val, #include "test.x" #undef X }; void level2(void) { level3(); level4(); } void level3(void) { level4(); }
test2.c
void level1(void) { level2(); level3(); level4(); } void level4(void) { }
test.x
X(1) X(2) X(3)
Я использую doxygen для создания callgraphs для этих функций. Вот что я ожидал:
Но вот что я получил:
Кажется, что X-macro на test.c является виновником. Мне удалось заставить его работать, делая 2 вещи (либо сделайте):
test.x
поэтому doxygen не находит его. Он покажет предупреждение, но callgraph верен. test.x
Обычно файл заканчивается сразу после X(3)
. Вопрос:
Как я могу получить надежный callgraph из doxygen без редактирования файлов? Есть ли настройка, которую мне нужно изменить, или эта простая ошибка?
У меня был опыт работы с xmacros. В общем, Doxygen будет обрабатывать macros как правильные декларации и фактически не обрабатывать их. Для того, чтобы работать с макросами (и это включает в себя x-macros). В общем:
MACRO_EXPANSION=yes
EXPAND_ONLY_PREDEF=yes
(что сделает Doxygen расширением всех макросов) или EXPAND_AS_DEFINED
. Кроме того, обратите внимание на это: http://www.stack.nl/~dimitri/doxygen/manual/config.html#cfg_skip_function_macros
Чтобы дать вам представление о возможностях с помощью xmacros и Doxygen, я могу создать соответствующую документацию из этого: https://github.com/couchbase/libcouchbase/blob/master/include/libcouchbase/error.h#L95