我想用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'

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

09-04 07:25