2009-10-16 11 views
7

मैं कुछ डॉक्सीजन टिप्पणी ब्लॉक लिखने की कोशिश कर रहा हूं, और मैं कोड के उदाहरण स्निपेट्स को शामिल करना चाहता हूं। बेशक, मैं उदाहरणों को वास्तव में संकलित करना चाहता हूं ताकि वे बासी न हों।मैं Doxygen टिप्पणी में .cpp फ़ाइल का सबसेट कैसे शामिल कर सकता हूं?

मेरे example.cpp (\ कि मैं ज फ़ाइल में शामिल) इस तरह दिखता है:

/** 
* \ingroup types_lib 
* 
* \class Time_Limiter 
* 
* \brief Thread safe gate used to control a resource (such as an internet quote service) that has a limit on how often you can call it. 
* 
* \dontinclude Time_Limiter_example.cpp 
* \skipline void 
* \until endcode 
* 
**/ 
:

#include "stdafx.h" 

#include "../types_lib/Time_Limiter.h" 
#include <vector> 

void tl_demo() { 
    // scarce will be a gate to control some resource that shouldn't get called 
    // more than 10 times a second 
    Time_Limiter scarce (10); 

    // here's a bunch of requests 
    std::vector<int> req (500); 

    for (size_t i=0;i<req.size();i++) { 
     scarce.tick(); 
     // once we get here, we know that we haven't ticked 
     // more than 10 times in the last second. 

     // do something interesting with req[i] 
    } 
} 

// endcode 

और मेरे हेडर फाइल (है कि मैं Doxygen चल रहा हूँ) इस तरह दिखता है

और मैं फ़ाइल के अंत तक "शून्य डेमो" से शुरू होने वाली सामग्री को शामिल करने के लिए डॉक्सिजन प्राप्त करना चाहता हूं (लेकिन // एंडकोड के बिना)।

मैंने \ dontinclude और \ skip, \ skipline, और \ till के साथ प्रयोग करने का प्रयास किया है, और मैं सही incantations को काफी समझ नहीं सकता।

संपादित करें: मेरी .h फ़ाइल शामिल है, और अब मुझे लगभग सही मात्रा मिल गई है। यह लगभग ठीक वही है जो मैं चाहता हूं, क्या टैग के बिना उपयोग करने का कोई तरीका है, और example.cpp से उस अंतिम // एंडकोड लाइन से छुटकारा पाएं?

+0

क्या आपने doxyfile में EXAMPLE_PATH को सही तरीके से सेट किया था? –

+0

हां। पाठ शामिल है, मैं बस कुछ incantation पता लगाने की कोशिश कर रहा हूँ ताकि मुझे शुरुआत में तीन # शामिल नहीं देखना पड़ेगा। –

+0

और आपने http://www.stack.nl/~dimitri/doxygen/commands.html#cmddontinclude पर उदाहरण देखा? –

उत्तर

2

2 आर्ग जोड़ने के लिए संपादित मैक्रो क्लिप करने के लिए:

#include "stdafx.h" 
#include "../types_lib/Time_Limiter.h" 
#include <vector>  
#include "Time_Limiter_example.inc" 

फ़ाइल "Time_Limiter_example.inc" फिर बस कोड उदाहरण हो सकते हैं।

यहां मैंने जो किया है, जो मेरे लिए काम करता है। अधिकतर .... EricM से संकेत से

मेरी स्रोत फ़ाइल लिया Time_Limiter_example.cpp है:

#include "stdafx.h" 

#include "../types_lib/Time_Limiter.h" 
#include <vector> 

void tl_demo() { 
    // scarce will be a gate to control some resource that shouldn't get called 
    // more than 10 times a second 
    Time_Limiter scarce (10); 

    // here's a bunch of requests 
    std::vector<int> req (500); 

    for (size_t i=0;i<req.size();i++) { 
     scarce.tick(); 
     // once we get here, we know that we haven't ticked 
     // more than 10 times in the last second. 

     // do something interesting with req[i] 
    } 
} // endcode 

void tl_demo_short() 
{ 
} //endcode 

और मैं इसे शामिल करने की है, लेकिन शीर्ष पर #includes नहीं चाहते हैं।

मैं के रूप में मेरे Doxyfile में एक उपनाम परिभाषित:

ALIASES += clip{2}="\dontinclude \1 \n \skipline \2 \n \until endcode" 

और मेरे शीर्षक में, मेरी टिप्पणी इस तरह दिखता है:

/** 
* \ingroup types_lib 
* 
* \class Time_Limiter 
* 
* \brief Thread safe gate used to control a resource (such as an internet quote service) that has a limit on how often you can call it. 
* 
* \clip{Time_Limiter_example.cpp,tl_demo} 
**/ 

और ठीक करता है मैं सिर्फ funciton सहित क्या चाहते हैं, .cpp फ़ाइल से tl_demo()।

0

मुझे लगता है कि \verbinclude आपको कोड के रूप में फ़ाइल शामिल करने की अनुमति देनी चाहिए और अंतिम पंक्ति में // \endcode डालना नहीं है।

संपादित करें: स्पष्ट करने के लिए, मैं सुझाव दे रहा हूँ कि आप कोड आप अपने स्वयं में शामिल करना चाहते फ़ाइल को शामिल कर दिया, और सीपीपी फ़ाइल में #include का उपयोग करें, और उसके बाद Doxygen हेडर फाइल में \verbinclude का उपयोग करें।

आप स्रोत फ़ाइल देखने के लिए की तरह होगा:

void tl_demo() { 
    // scarce will be a gate to control some resource that shouldn't get called 
    // more than 10 times a second 
    Time_Limiter scarce (10); 

    // here's a bunch of requests 
    std::vector<int> req (500); 

    for (size_t i=0;i<req.size();i++) { 
     scarce.tick(); 
     // once we get here, we know that we haven't ticked 
     // more than 10 times in the last second. 

     // do something interesting with req[i] 
    } 
} 
+0

ठीक है, लेकिन यह वही नहीं करता जो मैं चाहता हूं, जिसमें फ़ाइल का केवल एक सबसेट शामिल है। –

2

snippet कमांड कुछ शक्तिशाली है।

/*[email protected] Factory 
* 
* Creates sthg 
*/ 
sthg* Create(); 

और आप फ़ाइल sthgTests/sthg_factory.cpp का एक हिस्सा जोड़ना चाहते हैं:

  • संपादित sthgTests/sthg_factory.cpp और कोड आप चाहते हैं के हिस्से के चारों ओर एक टैग को जोड़ने आप इस प्रकार का कार्य हो कहो दस्तावेज में प्रकट करने के लिए इस तरह (test_factory नामक एक टैग का उपयोग कर कहते हैं):

    //! [test_factory] 
    void test_factory() 
    { 
        // code here 
    } 
    //! [test_factory] 
    
  • फिर इस तरह का टुकड़ा आदेश का उपयोग करें :

    /*[email protected] Factory 
    * 
    * Creates sthg 
    * @snippet sthgTests/sthg_factory.cpp test_factory 
    */ 
    sthg* Create(); 
    

यह दृष्टिकोण सेटअप करने के लिए आसान है और नहीं बल्कि सस्ते बनाए रखना है।

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