2017-02-23 22 views
5

के लिए डॉक्सीजन मैं बिना सफलता के सी में नकली टेम्पलेट्स के लिए डॉक्सीजन का उपयोग करके दस्तावेज़ उत्पन्न करने का प्रयास कर रहा हूं। मुझे उम्मीद है कि किसी को पता है कि मैक्रो ट्रिकरी को डॉक्सिजन प्रीप्रोसेसर में कैसे काम करना है? मैंने भाग्य के बिना "MACRO_EXPANSION" को सक्षम करने का प्रयास कर लिया है।सी टेम्पेट इम्यूलेशन

संपादित करें: इस प्रश्न का सबसे अधिक denatured रूप होगा: "मैं प्रीप्रोसेसर निर्देश # को डॉक्सिजन कैसे संभाल सकता हूं # सी प्रीप्रोसेसर करता है?"

मैं एक फ़ोल्डर "परीक्षण" (एक बहुत काल्पनिक उदाहरण) में निम्न कोड:

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 

हालांकि, योग * फ़ंक्शन के टेम्पलेट संस्करण डॉक्सिजन (.h या .c दस्तावेज़) में मौजूद नहीं हैं; उदाहरण के लिए, test.h नीचे है (हालांकि मैं भी खुश अगर यह बजाय test_template.h में दिखाया होगा):

doxygen output for test.h

किसी भी विचार?

+1

Sidenote: (http://stackoverflow.com/q/28499422/694733) मैक्रो प्रवंचना कर जब [आप फ़ाइलों पर नई-पंक्तियों अनुगामी कर रखी हैं]। – user694733

+0

मूल्यवान नोट। मैं व्यक्तिगत रूप से हमेशा आदत से बाहर एक नई लाइन (लंबी अवधि से सिस्टम से सीखा गुण) है, लेकिन यह उपरोक्त कोड स्निपेट में नहीं दिखाया जाएगा। – Squirrel

उत्तर

1
Doxygen प्रलेखन से

: http://www.stack.nl/~dimitri/doxygen/manual/preprocessing.html

आप अनिश्चित क्या Doxygen के पूर्व प्रसंस्करण के प्रभाव हो जाएगा आप Doxygen इस प्रकार चला सकते हैं कर रहे हैं:

Doxygen प्रीप्रोसेसर

-d

यह पूर्व प्रसंस्करण के बाद आउटपुट स्रोतों को मानक आउटपुट में डंप करने के लिए डॉक्सिजन को निर्देशित किया जाएगा (संकेत: सेट QUIET = YES और चेतावनी = एन ओ कॉन्फ़िगरेशन फ़ाइल में किसी अन्य आउटपुट को अक्षम करने के लिए)।

वास्तविक सी प्री प्रोसेसर से उत्पन्न आउटपुट में इसकी तुलना करें, यह सुनिश्चित करने के लिए कि सी कंपाइलर वास्तव में क्या करता है उससे मेल खाता है।

आपको यह काम करने के लिए डॉक्सिजन में पूर्व प्रसंस्करण से संबंधित कॉन्फ़िगरेशन चर को ट्विक करने की आवश्यकता हो सकती है।

कहा जा रहा है, और जैसा कि अन्य ने टिप्पणी की है, मैं व्यक्तिगत रूप से सी प्री प्रोसेसर का उपयोग नहीं करता, लेकिन मैं मानता हूं कि यह व्यक्तिगत राय का विषय है।

एक संभावित मुद्दा यह है कि खेलने में आता है: मैक्रो विस्तार हो रहा है, जबकि सी पूर्व प्रोसेसर कोड उत्पन्न कर सकते हैं, लेकिन यह टिप्पणियां उत्पन्न नहीं होगा, और सभी Doxygen मार्कअप सी टिप्पणियों में एम्बेडेड है।

ज़रूर, Doxygen लेने सकता है sum_uint8_t नाम के एक समारोह है कि वहाँ है, लेकिन वास्तव में इस समारोह के बारे में प्रलेखन जोड़ने के लिए, स्रोत कोड को स्पष्ट रूप से स्रोत कोड में 'संरचनात्मक आदेशों' जोड़ने की आवश्यकता होगी।

देखें http://www.stack.nl/~dimitri/doxygen/manua/docblocks.html#structuralcommands

+0

आश्चर्यजनक रूप से, मैं "-d प्रीप्रोसेसर" के साथ इनपुट स्रोतों को डंप करने के लिए डॉक्सिजन नहीं प्राप्त कर सकता। मैंने ENABLE_PREPROCESSING = हाँ, QUIET = हाँ, और चेतावनी = NO सुनिश्चित किया। अजीब, मैं इसके साथ गड़बड़ रखता हूँ। प्रीप्रोसेसर के बारे में बिंदुओं के जवाब में टिप्पणियों को चिपका नहीं, इसके लिए बाहर देखने के लिए एक अच्छी बात है। इस चरण में, मेरी कॉन्फ़िगरेशन में EXTRACT_ALL = YES के साथ, मेरा मानना ​​है कि इसे अभी भी उन्हें दस्तावेज़ में दिखाया जाना चाहिए (केवल टिप्पणियों के बिना)। – Squirrel

संबंधित मुद्दे