1

ビルド プロセスの一部として、. にある入力ディレクトリの tar ファイルを作成しますsrc/bundle/bundle。src/bundle/SConscript:

Import('*')

bundleDir = Dir("bundle")
jsontar = Command("bundle.tar", bundleDir,
                  "/home/dbender/bin/mkvgconf $SOURCE $TARGET")

私のSConstructで:

SConscript(Split('src/bundle/SConscript'),
  exports='bin_env lib_env', build_dir='tmp/bundle')

ビルドしようとすると:

scons: Reading SConscript files ...
scons: done reading SConscript files.
scons: Building targets ...
/home/dbender/bin/mkvgconf tmp/bundle/bundle tmp/bundle/bundle.tar
Input directory tmp/bundle/bundle not found!
scons: *** [tmp/bundle/bundle.tar] Error 1
scons: building terminated because of errors.

scons が src/bundle/bundle を tmp/bundle/bundle にコピーしていないことは明らかですが、その理由がわかりません。

脚注: mkvgconf に絶対パス名を使用するのは悪い習慣ですが、この問題が解決されるまでは中間的なものです。

4

1 に答える 1

1

SCons は、入力の内容については何も知りません。src/bundle/bundleプログラムだけmkvgconfが、そのディレクトリで何をするかを知っています。

1 つの解決策は、SConscript に明示的な依存関係を追加することです。

import os
Depends('bundle.tar', Glob(str(bundleDir) + os.path.sep + '*'))

これは、バンドル ディレクトリの内容を更新すると、mkvgconf スクリプトが再実行されることも意味します。

PS。build_dir引数名をに変更することをお勧めしvariant_dirます。最近の SCons リリースでは前者が廃止され、後者が支持されているためです。

于 2010-06-10T07:50:48.877 に答える