我通过创建swtoolkit的Google开发者Randall Spangler找到了答案。因此,这个答案是专门为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库。如果其中一个目标需要,它会自动复制到构建输出文件夹中。