SCons:复制外部库以构建输出目录

时间:2010-03-11 23:22:15

标签: scons swt

我们在Mac,Linux和Windows上使用SCons + swtoolkit构建系统。我们有一个svn存储库,它包含我们所有的外部库依赖项,其路径位于环境变量EXTERNAL_SDKS中。

在我们的每个目标SConscripts中,我想找到一个方法,该方法将查找目标链接到的EXTERNAL_SDKS路径下的库,并在构建和放置目标时将其复制到构建输出文件夹中那里。

我已经找到了一种方法,使用swtoolkit中的一些组件添加,但它减慢了stscripts的解析速度(mac上15秒,Windows上1分钟+)。

有没有人知道这样做的有效方法?

1 个答案:

答案 0 :(得分:2)

我通过创建swtoolkit的Google开发人员Randall Spangler找到了答案。因此,这个答案特定于将swtoolkit与SCons一起使用。

之前我们正在扫描目标依赖项,然后确定要从该依赖项扫描中复制哪些外部库。这就是导致严重放缓的原因。

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库。如果目标需要其中一个,它将自动复制到构建输出文件夹中。

相关问题