swtoolkitを作成したGoogleの開発者であるRandallSpanglerを介して答えを見つけました。したがって、この回答はSConsでの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ライブラリが検索されて公開されます。それらの1つがターゲットで必要な場合は、ビルド出力フォルダーに自動的にコピーされます。