添加WAF配置(C++)的路径

2024-05-15 11:50:52 发布

您现在位置:Python中文网/ 问答频道 /正文

如何向wscript添加include路径?

我知道我可以声明每个cpp文件要包含哪些文件夹,例如:

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

但我不想每个文件都设置它。我想添加一个“global includes”的路径,这样每次编译任何文件时都会包含它。


Tags: 文件build路径文件夹声明sourceincludedef
3条回答

我想出来了,步骤如下:

在wscript文件的configure函数中添加了以下签入。这将告诉脚本检查给定的库文件(本例中为libmongoclient),并将此检查的结果存储在MONGOCLIENT中。

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

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

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}

将依赖项添加到sepcific程序的构建函数中,该函数依赖于上述库(即MongoClient)。下面是一个例子。

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

在此之后,再次运行配置,并生成代码。

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

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

我花了一些时间在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')

相关问题 更多 >