10

wscriptにインクルードパスを追加するにはどうすればよいですか?

次のように、任意のcppファイルごとにどのフォルダーからどのファイルを含めるかを宣言できることを知っています。

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

しかし、私はすべてのファイルごとにそれを設定したくありません。「グローバルインクルード」へのパスを追加して、ファイルがコンパイルされるたびにパスがインクルードされるようにします。

4

3 に答える 3

14

答えを見つけました。'INCLUDES'の値を必要なパスのリストに設定するだけです。もう一度実行することを忘れないでくださいwaf configure:)

def configure(cfg):
    cfg.env.append_value('INCLUDES', ['include'])
于 2013-02-10T21:19:41.790 に答える
2

私は、bld.program()メソッドの「use」オプションを使用してこれを行うための良い方法を考え出すことに時間を費やしました。例としてブーストライブラリを使用して、私は次のことを思いつきました。お役に立てば幸いです。

'''
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')
于 2013-02-14T17:04:05.510 に答える
0

私はこれを理解し、手順は次のとおりです。

wscriptファイルのconfigure関数に以下のチェックを追加しました。これは、指定されたライブラリファイル(この場合はlibmongoclient)をチェックするようにスクリプトに指示し、このチェックの結果をMONGOCLIENTに保存します。

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

このステップの後、パッケージ構成ファイル(.pc)を/ usr / local / lib/pkgconfigパスに追加する必要があります。これは、libとヘッダーへのパスを指定するファイルです。このファイルの内容を以下に貼り付けます。

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}

上記のライブラリ(つまりMongoClient)に依存するsepcificプログラムのビルド関数に依存関係を追加しました。以下に例を示します。

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

この後、configureを再度実行し、コードをビルドします。

于 2015-05-05T17:33:33.437 に答える