わかりました、最初にいくつかの SCons の説明があります。Scons には、ビルドを行う際に 2 つのフェーズがあります。まず、分析フェーズでは、すべてのScons スクリプトが実行され、その結果、スクリプトで定義されたすべてのビルダーのソース ファイルとターゲット ファイルを記述した静的な依存関係ツリーが作成されます。次に、そのツリー、最後のビルドのビルド データベース、およびディスク上のファイルの署名に基づいて、古いターゲットを持つすべてのビルダーが再ビルドされます。
今あなたの質問に。generate
必要な場合 (generate
または構成ファイルが変更された場合)にのみ実行する場合generate
は、分析フェーズの一部として実行することは問題外です。使用しないでくださいExecute()
。代わりgenerate
に、独自のビルダーである必要があります。ここまでは順調ですね。
これで、最初のビルダーgenerate
と 2 番目のビルダーの 2 つのビルダーができましたbuildObject
。buildObject
のターゲットに依存しgenerate
ますが、あなたが述べたように、generate
ターゲットは分析時に不明です(generate
実行されないため、ビルダーとしてのみ設定されます)。分析時に未知のターゲットを持つことは、SCons の典型的な課題であり、簡単に解決する方法はありません。
私は通常、SCons.pleaser
ファイルと呼ばれるものを使用して解決します。あなたの場合generate
、高解像度のタイムスタンプを含む既知のターゲットが生成されます。buildObject
ビルダーは、このファイルをソースとして取得します。ここで、構成ファイルが変更されていない場合、generate
は実行されず、SCons.pleaser は変更されず、buildObject
実行されません。構成ファイルを変更すると、generate が実行され、SCons.pleaser が変更buildObject
され、同様に実行されます。
よろしく