我通过创建swtoolkit的Google开发人员randallspangler找到了答案。因此,这个答案特定于与scon一起使用swtoolkit。
之前,我们正在扫描目标的依赖关系,然后确定要从该依赖关系扫描中复制哪些外部库。这就是导致经济严重放缓的原因。
swtoolkit有一个env.Publish()方法,用于注册目标,以便将它们用作其他目标的依赖项。一旦发布了外部库,它们将通过在生成目标时swtoolkit中使用的ReplicatePublished()调用自动复制到生成输出文件夹中。
他给出了以下示例代码:
thirdparty_libs = []
for dir in env.SubstList2('$THIRDPARTY_LIB_DIRS'):
thirdparty_libs += env.Glob(dir + '/lib*.dylib')
thirdparty_libs += env.Glob(dir + '/lib*.a')
import os
for lib in thirdparty_libs:
name_parts = os.path.splitext(lib.name)
if name_parts[1] == '.dylib':
# TODO: Need to publish 'libfoo.dylib' or 'libfoo.a' as both
# 'libfoo' and 'foo'. Need to clean up sconscripts to remove 'lib' prefix
# from all libs for mac, linux.
lib_basename = name_parts[0]
env.Publish(lib_basename, 'run', lib)
env.Publish(lib_basename[3:], 'run', lib)
我们修改了它以满足我们的需要,并将它放在配置外部库使用的脚本中。例如,在我们的BoostSettings模块中,它查找并发布所有boost库。如果目标需要其中一个,则会自动将其复制到生成输出文件夹中。