2013-02-10 23 views
5

Jak dodać ścieżkę dołączania do wscript?Dodawanie ścieżki włączania do konfiguracji Waf (C++)

wiem, że mogę zadeklarować, które pliki z którego foldery Chcę to za każdym pliku cpp, jak:

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

ale nie chcę, aby ustawić go na każdym pliku. Chcę dodać ścieżkę do "global includes", aby była dołączana za każdym razem, gdy zostanie skompilowany dowolny plik.

Odpowiedz

8

Znalazłem odpowiedź. Musisz po prostu ustawić wartość "INCLUDES" na listę ścieżek, które chcesz. Nie zapomnij uruchomić waf configure ponownie :)

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

Koncentruję się na tej odpowiedzi niezależnie, ale wędrowałem tutaj, mając nadzieję, że jest bardziej niezależny sposób, aby to zrobić. – meawoppl

2

Spędziłem trochę czasu wypracowanie dobrej sposób to zrobić za pomocą opcji „użytkowania” w bld.program() metody. Pracując z bibliotekami boost jako przykładem, wymyśliłem następujące. Mam nadzieję, że to pomoże!

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

wyobraziłem to uwagę i kroki są następujące:

dodane po czek w funkcji configure w WScript pliku. To każe skryptowi sprawdzić dany plik biblioteki (w tym przypadku libmongoclient), a wyniki tej kontroli przechowujemy w MONGOCLIENT.

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

Po tym kroku, musimy dodać do pliku konfiguracyjnego pakietu (.pc) do katalogu/usr/local/lib ścieżka/pkgconfig. Jest to plik, w którym określamy ścieżki do biblioteki i nagłówków. Wklejanie zawartości tego pliku poniżej.

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} 

Dodany zależność do funkcji kompilacji sepcific programu, który zależy od powyższej biblioteki (tzn MongoClient). Poniżej znajduje się przykład.

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

Następnie uruchom ponownie konfigurację i skompiluj swój kod.

+1

W przyszłości proszę dopasować odpowiedzi do pytania, a nie tylko powtórzyć odpowiedź. Tutaj odpowiedź * zdarza się *, aby zastosować się do obu pytań, a pytania są na tyle różne, że nie można ich zduplikować (jeden prosi o dodanie załączników, drugi dodaje bibliotekę). Przynajmniej wyjaśnij, w jaki sposób dotyczy * konkretnej sytuacji * w pytaniu. –