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

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

有什么想法吗?谢谢!

最佳答案

你可以这样做:

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'

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

关于c++ - 如何在 waf 构建系统中安装具有不同名称的库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8189796/

相关文章:

waf - 我的 Waf wscript 是否可以调用当前目录中的其他 wscript?

c - 根据检测到的库版本定义

c++ - 使用可变参数访问无参数模板函数的不明确重载

python - 类型错误 : list() takes at most 1 argument (3 given) for list class inheritance

python - 循环 clump_masked 索引

python - 从 python 中的可调用或 lambda 填充列表或元组

python - 如何在 waf 中抑制构建命令的控制台输出?

c++ - std:numeric_limits<double>::epsilon 定义

c++ - 如果我创建一个修改值的迭代器,静态成员 "reference"应该是什么类型?

java - 为什么hypot()函数这么慢?