2013-02-10 8 views
5

Wie kann ich einen Include-Pfad zu wscript hinzufügen?Hinzufügen eines Pfades zur Waf-Konfiguration (C++)

Ich weiß, ich kann erklären, welche Dateien aus dem Ordner I pro jeder CPP-Datei enthalten sein soll, wie:

def build(bld): 
    bld(features='c cxx cxxprogram', 
     includes='include', 
     source='main.cpp', 
     target='app', 
     use=['M','mylib'], 
     lib=['dl']) 

aber ich will es nicht pro jede Datei einzustellen. Ich möchte einen Pfad zu "global includes" hinzufügen, damit es jedes Mal hinzugefügt wird, wenn eine Datei kompiliert wird.

Antwort

8

Ich habe eine Antwort gefunden. Sie müssen den Wert von "INCLUDES" einfach auf die Liste der gewünschten Pfade setzen. Vergessen Sie nicht, waf configure wieder zu laufen :)

def configure(cfg): 
    cfg.env.append_value('INCLUDES', ['include']) 
+0

Ich konvergierte unabhängig von dieser Antwort, aber ich wanderte hier in der Hoffnung, es gab eine mehr Betriebssystem unabhängige Möglichkeit, dies zu tun. – meawoppl

2

ich einige Zeit damit verbracht, eine gute Möglichkeit Ausarbeiten dies mit der „Verwendung“ Option in bld.program() Methoden zu tun. Ich habe am Beispiel der Boost-Bibliotheken folgendes herausgefunden. Ich hoffe, es hilft!

''' 
run waf with -v option and look at the command line arguments given 
to the compiler for the three cases. 

you may need to include the boost tool into waf to test this script. 
''' 
def options(opt): 
    opt.load('compiler_cxx boost') 

def configure(cfg): 
    cfg.load('compiler_cxx boost') 
    cfg.check_boost() 

    cfg.env.DEFINES_BOOST = ['NDEBUG'] 

    ### the following line would be very convenient 
    ###  cfg.env.USE_MYCONFIG = ['BOOST'] 
    ### but this works too: 
    def copy_config(cfg, name, new_name): 
     i = '_'+name 
     o = '_'+new_name 
     l = len(i) 
     d = {} 
     for key in cfg.env.keys(): 
      if key[-l:] == i: 
       d[key.replace(i,o)] = cfg.env[key] 
     cfg.env.update(d) 

    copy_config(cfg, 'BOOST', 'MYCONFIG') 

    # now modify the new env/configuration 
    # this adds the appropriate "boost_" to the beginning 
    # of the library and the "-mt" to the end if needed 
    cfg.env.LIB_MYCONFIG = cfg.boost_get_libs('filesystem system')[-1] 

def build(bld): 

    # basic boost (no libraries) 
    bld.program(target='test-boost2', source='test-boost.cpp', 
       use='BOOST') 

    # myconfig: boost with two libraries 
    bld.program(target='test-boost', source='test-boost.cpp', 
       use='MYCONFIG') 

    # warning: 
    # notice the NDEBUG shows up twice in the compilation 
    # because MYCONFIG already includes everything in BOOST 
    bld.program(target='test-boost3', source='test-boost.cpp', 
       use='BOOST MYCONFIG') 
0

Ich dachte, dies und die Schritte sind wie folgt:

hinzugefügt folgende Kontrolle in der configure Funktion in wscript Datei. Dies weist das Skript an, nach der gegebenen Bibliotheksdatei (in diesem Fall libmongoclient) zu suchen, und wir speichern die Ergebnisse dieser Überprüfung in MONGOCLIENT.

conf.check_cfg(package='libmongoclient', args=['--cflags', '--libs'], uselib_store='MONGOCLIENT', mandatory=True) 

Nach diesem Schritt benötigen wir eine Paketkonfigurationsdatei (.pc) in/usr/local/lib/pkgconfig Pfad hinzuzufügen. Dies ist die Datei, in der wir die Pfade zu Lib und Headern angeben. Den Inhalt dieser Datei unten einfügen.

prefix=/usr/local 
libdir=/usr/local/lib 
includedir=/usr/local/include/mongo 

Name: libmongoclient 
Description: Mongodb C++ driver 
Version: 0.2 
Libs: -L${libdir} -lmongoclient 
Cflags: -I${includedir} 

Added die Abhängigkeit in der Aufbaufunktion des sepcific Programm, das auf der oben genannten Bibliothek abhängt (d.h. MongoClient). Unten ist ein Beispiel.

mobility = bld(target='bin/mobility', features='cxx cxxprogram', source='src/main.cpp', use='mob-objects MONGOCLIENT',) 

Danach führen Sie die Konfiguration erneut und erstellen Sie Ihren Code.

+1

In Zukunft sollten Sie Ihre Antworten auf die jeweilige Frage abstimmen und nicht nur die Antwort duplizieren. Hier trifft die Antwort * zu * auf beide Fragen zu und die Fragen sind so unterschiedlich, dass Sie sie nicht dupen können (man fragt nach Hinzufügungen, die andere fügt eine Bibliothek hinzu). Erklären Sie in jedem Fall, wie es auf die * spezifische Situation * in der Frage zutrifft. –