2017-09-20 11 views
5

मेरे पास एक बड़ी परियोजना है जहां स्विग-इनकॉलेल ध्वज का उपयोग करना समझ में आता है। हालांकि, कुछ ऐसी फ़ाइलें हैं जिन्हें मैं विस्तारित नहीं करना चाहूंगा, मुख्य रूप से एसटीएल पुस्तकालय (जैसे वेक्टर और सूची)। क्या समावेशी ध्वज का उपयोग करना संभव है, लेकिन विस्तार से कुछ फ़ाइलों को ब्लैकलिस्ट करने के लिए (जैसे वेक्टर और सूची)?स्विग-समावेशी को छोड़कर ...

उत्तर

2

मैं SWIG में एक विशेषज्ञ नहीं हूं लेकिन documentation for latest version और स्रोत कोड (विशेष रूप से Source/Modules/main.cxx फ़ाइल पर, जहां कमांड लाइन तर्क पढ़े जाते हैं) पर एक नज़र डालें, क्या यह स्पष्ट है कि ऐसा विकल्प मौजूद नहीं है (यहां तक ​​कि नहीं एक छुपा हुआ)।

दूसरी तरफ, यदि आपको लगता है कि आप ऐसा करने के लिए आसानी से स्रोत कोड को संशोधित कर सकते हैं।

आप main.cxx फ़ाइल में एक नया कमांड लाइन विकल्प जोड़ सकते हैं ताकि फ़ाइल नाम जोड़ने के लिए और फिर नाम खोजने के लिए ऐसे नामों की तुलना कर सकें। आप Source/Preprocessor/preprocessor.h फ़ाइल में एक वैश्विक फ़ंक्शन जोड़ सकते हैं, जो पहले से ही main.cxx द्वारा शामिल है।

-includeall विकल्प के लिए कोड Source/Preprocessor/cpp.c में है। उस फ़ाइल में include_all नामक एक वैश्विक चर भी है जो 1 पर सेट होता है जब एनालॉग तर्क कमांड लाइन में सेट होता है (यह आपको यह पता लगाने के लिए मार्गदर्शन करेगा कि यह विकल्प कहां निष्पादित किया गया है)। (लाइन 1715 में शुरू संस्करण 3.0.12 के लिए)

अब, Preprocessor_parse(...) समारोह में आप पा सकते हैं जहां हेडर फाइल पार्स किए जाते हैं:

s1 = cpp_include(fn, sysfile); 
if (s1) { 
    /* ....... */ 
} 

आप String *Swig_last_file(void) समारोह में दिलचस्पी होगी, कि वापस आ जाएगी हेडर लाइन का फ़ाइल नाम सिर्फ पार्स किया गया।

s1 = cpp_include(fn, sysfile); 
if (s1) { 
    int found = 0; 

    String* filename = Swig_last_file(); 
    /* Here find for a match in the exclusion list */ 

    if (!found) { /* keep working as usual */ 
    /* ....... */ 
    } /* if found, just ignore the include directive for that file */ 

    Delete(s1); 
} 

मुझे पता है कि यह एक पूर्ण समाधान नहीं है लेकिन आशा है कि आप वांछित व्यवहार प्राप्त करने के लिए मार्गदर्शन कर सकें।

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