2017-02-23 14 views
5

Tôi đang cố tạo tài liệu bằng Doxygen cho các mẫu mô phỏng trong C mà không có nhiều thành công. Tôi hy vọng một người nào đó biết làm thế nào để làm cho công việc macro trickery trong preprocessor doxygen? Tôi đã thử bật "MACRO_EXPANSION" mà không có may mắn.Doxygen cho C thi đua Tempate

EDIT: Dạng biến dạng nhất của câu hỏi này sẽ là: "Làm thế nào tôi có thể làm cho Doxygen xử lý chỉ thị tiền xử lý #include theo cách tương tự mà bộ tiền xử lý C thực hiện?"

Tôi có đoạn code sau đây trong một thư mục "test" (một ví dụ rất giả tạo):

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 

Trong doxygen tập tin cấu hình của tôi:

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 

Tuy nhiên, các phiên bản templated của hàm tổng * không có trong tài liệu doxygen (.h hoặc .c); ví dụ, test.h dưới (mặc dù tôi cũng sẽ rất vui nếu nó xuất hiện trong test_template.h thay):

doxygen output for test.h

Bất kỳ suy nghĩ?

+1

Sidenote: [Hãy chắc chắn rằng bạn đã trailing dòng mới trên các tập tin] (http://stackoverflow.com/q/28499422/694733) khi thực hiện thủ đoạn gian trá vĩ mô. – user694733

+0

Ghi chú có giá trị. Cá nhân tôi luôn luôn có một dòng mới ra khỏi thói quen (đặc điểm học được từ các hệ thống dài qua) nhưng nó sẽ không hiển thị trong đoạn mã ở trên. – Squirrel

Trả lời

1

Từ các tài liệu doxygen: http://www.stack.nl/~dimitri/doxygen/manual/preprocessing.html

Nếu bạn không chắc chắn những gì ảnh hưởng của tiền xử lý doxygen sẽ là bạn có thể chạy doxygen như sau:

doxygen -d Preprocessor

này sẽ hướng dẫn doxygen đổ các nguồn vào tới đầu ra tiêu chuẩn sau khi xử lý trước đã được thực hiện (Gợi ý: đặt QUIET = YES và CẢNH BÁO = N O trong tập tin cấu hình để vô hiệu hóa bất kỳ đầu ra nào khác).

So sánh điều này với đầu ra được tạo ra từ bộ xử lý trước c thực, để đảm bảo những gì doxygen mở rộng thực sự khớp với những gì trình biên dịch C thấy.

Bạn có thể cần phải tinh chỉnh các biến cấu hình liên quan đến việc xử lý trước trong doxygen để thực hiện công việc này.

Điều đó đang được nói, và như những người khác đã nhận xét, tôi sẽ không sử dụng bộ xử lý trước C như thế này, nhưng tôi đồng ý rằng đây là vấn đề cá nhân.

Một vấn đề có thể là đi vào chơi: bộ vi xử lý trước C có thể tạo ra đang đồng thời mở rộng các macro, nhưng nó sẽ không tạo ra comments, và tất cả các đánh dấu doxygen được nhúng trong C ý kiến. Chắc chắn, doxygen có thể nhận rằng có một hàm có tên là sum_uint8_t, nhưng để thực sự thêm thêm tài liệu về chức năng này, mã nguồn sẽ cần thêm một cách rõ ràng 'các lệnh cấu trúc' trong mã nguồn.

Xem http://www.stack.nl/~dimitri/doxygen/manua/docblocks.html#structuralcommands

+0

Kỳ lạ thay, tôi không thể có được doxygen để đổ các nguồn đầu vào bằng "-d Preprocessor". Tôi đảm bảo ENABLE_PREPROCESSING = YES, QUIET = YES, và WARNINGS = NO là tốt. Odd, tôi sẽ tiếp tục làm rối tung nó. Để đáp lại quan điểm về bộ tiền xử lý không dán các bình luận, đó là một điều tốt để xem ra. Ở giai đoạn này, với EXTRACT_ALL = YES trong cấu hình của tôi, tôi tin rằng nó vẫn nên hiển thị chúng trong tài liệu (chỉ cần không có ý kiến). – Squirrel

Các vấn đề liên quan