1

ディレクトリ内のすべてのJPEGファイルを(たとえば)PNGに変換するSConstructファイルを作成したいと思います。

私はビルダーを大丈夫だと思います:

ConvToPNG = Builder(action = 'convert $SOURCE $TARGET',
        suffix = '.png',
        src_suffix = '.jpg')
env['BUILDERS']['ConvToPNG'] = ConvToPNG

しかし、構築する必要のあるすべてのターゲットのリストを作成する方法がわかりません。私は次のようなPython-yの方法でそれを行うことができます:

pix_conversions = [env.ConvToPNG(jpg_src) for jpg_src in Glob('pix/img_*.jpg')]

そして多分私はそれらのためにエイリアスを使用します:

env.Alias('convert_all', pix_conversions)

または、手動でノードを作成し、それDependsを変換に使用します。

問題は、これはスキャナーが一種のために作られたもののようです。しかし、それをうまく機能させることができませんでした。ディレクトリで動作するBuilderを作成し、多数のターゲットを追加するScannerを呼び出してみましたが、SConsの内部では、Builderがファイルで実行されることを想定しているため、動作しませんでした。(または、少なくとも、それは私がエラーメッセージから収集したものです)。

これを行うSCons-yの方法は他にもありますか?

4

2 に答える 2

1

スキャナーは暗黙の依存関係用です。

fooたとえば、のを実行するものに依存するビルドがfoo.c必要#includeですbar.c。したがって、SConsにfoo依存関係を使用してビルドするように指示するとfoo.cCスキャナーは明示的な依存関係に基づいて暗黙的な依存関係を自動的に取得します。bar.cfoo.c

于 2010-02-13T06:01:39.380 に答える
1

手順は問題ないようですが、AlwaysBuild関数に渡す必要のあるエイリアスノードは次のとおりです。

env.AlwaysBuild(env.Alias('convert_all', pix_conversions))

したがって、最終結果は次のようになります。

ConvToPNG = Builder(action = 'convert $SOURCE $TARGET',
        suffix = '.png',
        src_suffix = '.jpg')
env['BUILDERS']['ConvToPNG'] = ConvToPNG
pix_conversions = [env.ConvToPNG(jpg_src) for jpg_src in Glob('pix/img_*.jpg')]
env.AlwaysBuild(env.Alias('convert_all', pix_conversions))

スキャナーがなくても問題なく動作します。SConsはJPEGファイルのMD5ハッシュをチェックし、最後の変換以降にファイルが変更された場合は、ビルダーが再度起動されます。

于 2010-02-14T08:22:38.763 に答える