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

how to install a library with a different name in waf build system?

本文关键字:安装 waf 构建 系统      更新时间:2023-10-16

我想用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,但这似乎会影响当前环境下的所有库。我们有一个相当复杂的构建,使用了很多不同的环境来同时构建调试/发布,所以仅仅克隆当前环境并改变标志也不能工作,因为它克隆的是默认环境,而不是目标最终构建的环境(因为我们在构建时克隆了每个环境的目标)。

任何想法吗?谢谢!

你可以这样做:

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'

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

您可以使用两个关键字参数:"name"answers"target"。"target"是创建的文件的名称,而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 "。并将其安装到/home/brian/lib/mylib