如何在waf构建系统中安装具有不同名称的库?

时间:2011-11-18 22:12:02

标签: c++ python waf

我想用waf构建一个库,但是使用与目标名称不同的名称安装它。看来你可以做到

bld.shlib(..., install_path='${PREFIX}/lib')

但我需要能够做到这样的事情:

bld.shlib(..., install_as='${PREFIX}/lib/xyz')

另外,bld.install_as()不会工作,因为它似乎不接受任务作为目标,我无法弄清楚如何将任务变成代表目标的节点,所以以下不会工作要么:

tgt = bld.shlib(...)
bld.install_as('foo', tgt)

或者,我需要能够禁用自动添加到库名称的“lib”前缀,但仅限于这一个库 - 在构建期间不是所有这些库,例如类似的东西:

bld.shlib(..., libprefix='', install_path="${PREFIX}/lib/")

我知道你也可以设置shlib_PATTERN,但这似乎会影响当前环境下的所有库。我们有一个非常复杂的构建,它使用许多不同的环境来同时构建调试/发布,所以只是克隆当前环境并更改标志也不起作用,因为它克隆了默认环境,而不是最终构建目标的环境under(因为我们在构建期间克隆了每个环境的目标)。

有什么想法?谢谢!

2 个答案:

答案 0 :(得分:7)

你可以这样做:

hello_lib = bld.shlib(
       includes='/usr/include/python',
       source='a.cpp',
       target='hello',
       uselib='BOOST_PYTHON',
       vnum='0.0.1')
hello_lib.env.cxxshlib_PATTERN = '%s.so'

此代码仅更改一个任务的命名模式。

答案 1 :(得分:1)

您可以使用两个关键字参数:“name”和“target”。 “target”是文件create的名称,而Name是使用“--target”参数时的目标名称。令人困惑,但这是一个例子:

bld(features=['cxx','cxxshlib'],
    source=src,
    includes=inc,
    target='OutputName',
    name='NameOfTarget',
    use=libs,
    install_path='${PREFIX}/lib/MyLibs
    )

waf configure build install --target=NameOfTarget --prefix=/home/Brian 

这会创建一个共享库“libOutputName.so”并将其安装到/ home / Brian / lib / MyLib