2012-12-04 26 views
7

मैं हाल ही में एक नया एनएस 3 मॉड्यूल बना रहा हूं। मेरे कोड में, मैं C++11 (c++0x) की कुछ नई विशेषताओं का उपयोग करता हूं, मैं waf कॉन्फ़िगरेशन सिस्टम में एक जीसीसी फ्लैग (CXXFLAGS) "-std=c++0x" जोड़ना चाहता हूं।विशेष रूप से एक विशिष्ट मॉड्यूल के लिए जीसीसी झंडे (CXXFLAGS) निर्दिष्ट करने के लिए कैसे?

मैंने इसे आजमाया: CXXFLAGS="-std=c++0x" waf configure, और फिर इसे बनाएं। हालांकि, यह पता चला है कि ipv4-address जैसे कुछ exsiting मॉड्यूल c++11 के अनुकूल नहीं है। इस प्रकार, मैं विशेष रूप से अपने नए मॉड्यूल के लिए इस ध्वज को निर्दिष्ट करना चाहता हूं ताकि अन्य मॉड्यूल का पालन C++ 11 पर नहीं किया जाएगा।

मैं मेरी नई मॉड्यूल में WScript को यह जोड़ने की कोशिश की:

def configure(conf): 
    conf.env.append_value('CXXFLAGS', '-std=c++0x') 

यह पहली बार परीक्षण के रूप में विफल रहता है।

मैं यह कैसे कर सकता हूं?

उत्तर

1

करने के लिए waf book 1.7.8, section 9.1.1 and 9.1.2

bld.shlib(source='main.c', 
      target='myshlib', 
      cflags  = ['-O2', '-Wall'], 
      cxxflags  = ['-O3', '-std=c++0x'], 
      use   = 'myobjects') 

    bld.objects(source='ip4.c', 
      cflags  = ['-O2', '-Wall'], 
      cxxflags  = ['-std=somethingelse'], 
      target  = 'myobjects') 

नोट # 1 अनुसार - इस कोड wafbook में प्रदान की 2 उदाहरण से बना है और नहीं सब पर परीक्षण किया गया।

नोट # 2 - आप निर्माण से पहले 'myobjects' उत्पन्न या वे waf अनुक्रमित के रूप में, 'myshlib' के निर्माण के लिए इस्तेमाल नहीं किया जा सकता है सभी फाइलों को की waf जागरूक बनाना पड़ सकता है।

+0

लेकिन NS3 waf प्रणाली इतनी जटिल है कि वे इस तरह से नहीं स्रोत और लक्ष्य को व्यवस्थित है ... – user1875337

1

हालांकि @ drahnr का जवाब वेनिला वाफ के लिए सही है, लेकिन यह एनएस -3 की बिल्ड सिस्टम के साथ काम नहीं करेगा, जो स्पष्ट रूप से ओपी चाहता है। एक NS-3 प्रोग्राम में CXXFLAGS जोड़ने के लिए, आप उन्हें कॉन्फ़िगरेशन चरण के बजाय बिल्ड ऑब्जेक्ट में जोड़ सकते हैं।

उदाहरण के लिए:

def build(bld): 
    obj = bld.create_ns3_program('my_app', ['core', 'other-dependencies']) 
    obj.source = 'MyApplication.cpp' 
    obj.cxxflags = ['-std=c++11']