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

我找到了答案。您只需将“包含”的值设置为您想要的路径列表。不要忘记waf configure再次运行:)

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

我花了一些时间在 bld.program() 方法中使用“use”选项找到一个好方法。以使用 boost 库为例,我想出了以下内容。我希望它有帮助!

'''
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 文件的配置功能中添加了以下检查。这告诉脚本检查给定的库文件(在本例中为 libmongoclient),我们将检查的结果存储在 MONGOCLIENT 中。

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

在这一步之后,我们需要在 /usr/local/lib/pkgconfig 路径中​​添加一个包配置文件(.pc)。这是我们指定 lib 和 headers 路径的文件。在下面粘贴此文件的内容。

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)的特定程序的构建函数中添加了依赖项。下面是一个例子。

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

在此之后,再次运行配置,并构建您的代码。

于 2015-05-05T17:33:33.437 回答