5

現在、私は 100 万 sloc のレガシー プロジェクトを退屈な .cmd スクリプトから SCons に移植しようとしています。その一部は VC++ で、他は Delphi です。C++ 部分の SConscripts の作成は簡単でした。

Delphi 部分をビルドするために、プログラムかライブラリ プロジェクトかを検出する非常に単純なビルダーを作成しました。SConscript を介して連鎖した後にビルダーを呼び出すと、scons が dcc32 $subdir/project.dpr を呼び出すようになり、dcc32 が $subdir ではなく現在のディレクトリでユニットを探すように誤解させます。

sconscript にあるコマンドを実行する前に $subdir に入るように scons に指示する方法はありますか、それともビルダー内で修正する必要がありますか?

前もって感謝します

4

1 に答える 1

5

SConsは、それらを読み取るときにすでにサブディレクトリSConscriptsのディレクトリに変更されているため、実際のビルダーで問題を修正する必要があるようです。

スクリプトが解析され、SConsがビルドコマンドを実行すると、スクリプトは最上位ディレクトリに残ります。次に、その最上位ディレクトリに相対的なパス名を使用してコマンドが発行されます。この動作を変更する方法はchdir、ビルダーでキーワードを使用することです。

sconsのmanページの例は次のとおりです。

b = Builder(action='build < ${SOURCE.file} > ${TARGET.file}',
            chdir=1)
env = Environment(BUILDERS = {'MyBuild' : b})
env.MyBuild('sub/dir/foo.out', 'sub/dir/foo.in')

.fileを使用してもビルダーに渡される名前は変更されないため、コンポーネントを指定する必要がありますchdir。つまり、それらは引き続き最上位ディレクトリに相対的です。

于 2010-06-07T19:44:07.417 に答える