0

SCons でフォールバック構築メソッドのようなものを実装することは可能ですか?

たとえば、SConscript に次のコードがあります。

if check_something():
    MyBuilder(a, b)
....
if dont_know_how_to_build(a):
    FallBackBuilder(a, c)

「通常のビルド方法」が発動するかどうかは予測できません。しかし、それがアクティブ化されておらず、SCons が をビルドする方法がわからない場合は、 をa使用したいと思いFallBackBuilderます。

もちろん、私は次のようなものを書くことができることを理解しています:

if check_something():
    MyBuilder(a, b)
else:
    FallBackBuilder(a, c)

SConscript/SConstruct ファイルには、ビルダーをa指定できる場所が何千もある可能性があるためです。

SConscript で「フォールバック」メソッドを指定したいだけです。

どう思いますか?出来ますか?それとも、それはまったく間違った方向ですか?

言い換えれば、SConscript のどこかで、すでに関連付けられているビルダーを持つオブジェクトのリストを取得できるとしたら?

例えば:

Builder1(a,b)
Builder2(b,c)
list_of_buildable_objects = get_list_of_buildable_objects()
Builder3(c,d)

この例で等しいか、このようなものでなければならないビルド可能なオブジェクトのリストを取得する方法を知りたいです[a, b]

4

1 に答える 1

0

ご指定のとおり、現在は不可能です。

SConstruct/SConscripts は、SCons に何をすべきかを伝えるために使用されます。それらのことはすぐには行われません。この情報を使用して依存関係ツリーを構築します。依存関係ツリーは、一部のソース スキャナーによって追加され、システム内のすべての依存関係の (できれば) 全体像を構築します。

次に、この DAG (有向非巡回グラフ) をトラバースして、発行するコマンドの適切な順序を見つけます。

グラフ内の一部のオブジェクトには、SConstruct/SConscripts 経由ではなく、SCons によって直接割り当てられたビルダーがあります。

他のビルダーが実行されて失敗した後に、このフォールバック ビルダーを実行しますか? それとも、これはシステムが他の指定されたビルダーを持たないターゲットのためのものですか?

于 2013-03-30T06:34:18.300 に答える