2013-02-10 10 views
5

Come posso aggiungere un percorso di inclusione per WScript?Aggiunta di percorso di inclusione alla configurazione Waf (C++)

so di poter dichiarare che i file da cartelle che voglio includere per qualsiasi file cpp, come:

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

ma non voglio impostarlo per ogni file. Voglio aggiungere un percorso a "include globali" in modo che sia incluso ogni volta che verrà compilato qualsiasi file.

risposta

8

ho trovato una risposta. Devi semplicemente impostare il valore di "INCLUDE" nell'elenco dei percorsi che desideri. Non dimenticare di eseguire waf configure ancora :)

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

Sono stato indirizzato su questa risposta in modo indipendente, ma ho vagato qui sperando che esistesse un modo più indipendente per farlo. – meawoppl

2

ho trascorso qualche tempo a lavorare fuori un buon modo per farlo utilizzando l'opzione "utilizzare" in bld.program metodi(). Come esempio, con le librerie di boost ho trovato il seguente. Spero possa essere d'aiuto!

''' 
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

ho capito questo ed i passi sono i seguenti:

Aggiunto seguente controllo nella funzione di configurazione nel file di WScript. Ciò indica allo script di controllare il file della libreria specificato (libmongoclient in questo caso) e archiviamo i risultati di questo controllo in MONGOCLIENT.

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

Dopo questo passo, abbiamo bisogno di aggiungere un file di configurazione del pacchetto (.PC) in/lib percorso usr/local// pkgconfig. Questo è il file in cui vengono specificati i percorsi per lib e intestazioni. Incollare il contenuto di questo file qui sotto.

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} 

Aggiunto la dipendenza nella funzione build del programma di sepcific che dipende dalla libreria di cui sopra (cioè MongoClient). Di seguito è un esempio.

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

Al termine, eseguire di nuovo la configurazione e creare il codice.

+1

In futuro, adatta le tue risposte alla domanda in questione e non solo duplica la risposta. Qui, la risposta * si applica * ad entrambe le domande, e le domande sono abbastanza diverse da non poterle duplicare (una domanda per aggiungere include, l'altra per aggiungere una libreria). Almeno spiega in ciascuno come si applica alla * situazione specifica * nella domanda. –

Problemi correlati