Я без особого успеха пытаюсь сгенерировать документацию с использованием Doxygen для эмулированных шаблонов на C. Я надеюсь, что кто-то знает, как заставить макросы работать в препроцессоре doxygen? Я уже безуспешно пытался включить MACRO_EXPANSION.
РЕДАКТИРОВАТЬ: Наиболее денатурированная форма этого вопроса будет: «Как я могу заставить Doxygen обрабатывать директиву препроцессора #include аналогично препроцессору C?»
У меня в папке "test" есть следующий код (очень надуманный пример):
templates.h
#ifndef TEMPLATES_H_
#define TEMPLATES_H_
#define CAT(X,Y) X##_##Y
#define TEMPLATE(X,Y) CAT(X,Y)
#endif // TEMPLATES_H_
test.h
#ifndef TEST_H_
#define TEST_H_
#include "templates.h"
#ifdef TEST_T
#error "TEST_T cannot be defined prior to this compilation step"
#endif
#define TEST_T uint8_t
#include "test_template.h"
#undef TEST_T
#define TEST_T uint16_t
#include "test_template.h"
#undef TEST_T
#endif // TEST_H_
test_template.h
#ifdef TEST_T
#include "templates.h"
TEST_T TEMPLATE(sum,TEST_T)(TEST_T a, TEST_T b);
#endif // ifdef TEST_T
test.c
#include "test.h"
#ifdef TEST_T
#error "TEST_T cannot be defined prior to this compilation step"
#endif
#define TEST_T uint8_t
#include "test_template.c"
#undef TEST_T
#define TEST_T uint16_t
#include "test_template.c"
#undef TEST_T
test_template.c
#ifdef TEST_T
TEST_T TEMPLATE(sum,TEST_T)(TEST_T a, TEST_T b)
{
return a + b;
}
#endif // ifdef TEST_T
В моем файле конфигурации doxygen:
test.cfg
# Doxyfile 1.8.13
PROJECT_NAME = "Test"
OUTPUT_DIRECTORY = "docs_test"
TAB_SIZE = 3
OPTIMIZE_OUTPUT_FOR_C = YES
INPUT = "../test"
RECURSIVE = YES
MACRO_EXPANSION = YES
# Temporary to extract all without tags
EXTRACT_ALL = YES
Однако шаблонные версии функции sum * отсутствуют в doxygen (документация .h или .c); например, test.h находится ниже (хотя я был бы также рад, если бы он появился в test_template.h вместо этого):
Есть предположения?