2012-12-04 9 views
7

Ich baue vor kurzem ein neues NS3-Modul. In meinem Code verwende ich etwas neue Funktionen der C++11 (c++0x), ich möchte ein GCC-Flags (CXXFLAGS) "-std=c++0x" zu dem waf Konfigurationssystem hinzufügen.Wie gcc Flags (CXXFLAGS) speziell für ein bestimmtes Modul angeben?

Ich habe versucht, dies: CXXFLAGS="-std=c++0x" waf configure, und dann bauen Sie es. Es stellt sich jedoch heraus, dass einige der vorhandenen Module wie die ipv4-Adresse nicht kompatibel zu c++11 sind. Daher möchte ich dieses Flag speziell für mein neues Modul angeben, damit andere Module nicht in C++ 11 berücksichtigt werden.

Ich habe versucht, dies auf die wscript in mein neues Modul hinzuzufügen:

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

Es als erste Versuch fehlschlägt.

Wie kann ich das tun?

Antwort

1

Nach dem 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') 

Hinweis # 1 - dieser Code der in der wafbook bereitgestellt 2 Beispiele zusammengesetzt und nicht getestet.

Anmerkung # 2 - Sie müssen waf bewusst machen, dass "myobjects" generiert oder sie nicht verwendet werden können, um "myshlib" zu erstellen, da alle Dateien indexiert vor Gebäude.

+0

aber das NS3 waf-System ist so kompliziert, dass sie die Quelle und Ziele nicht auf diese Weise organisieren ... – user1875337

1

Obwohl @ drahnrs Antwort für Vanilla Waf korrekt ist, wird es nicht mit dem Build-System von NS-3 funktionieren, was anscheinend OP ist. Um CXXFLAGS zu einem NS-3-Programm hinzuzufügen, können Sie sie dem Build-Objekt anstatt in der Konfigurationsphase hinzufügen.

Zum Beispiel:

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