SConstruct ファイルをコード ブロックに分割しようとしています。各ブロックはエイリアスによって制御され、デフォルトではコードは実行されません。つまり、実行するだけscons
です。エイリアスはもちろんコマンドラインから実行されます (以下の例):
scons h
ここにいくつかのコード例があります。これはうまくいくようです。ただし、質問は3つ。
これを行うより良い方法はありますか?
より具体的には、Alias 呼び出しのターゲット引数がアクション関数
h
とh3
アクション関数にどのように渡されるのか理解できません。それらを空白のままにすると、ビルドが機能しないことに気付きました。ただし、これらの関数は引数を取らないため、これらの関数にターゲットを渡す明確な方法はありません。関連して、ドキュメントには、アクション関数には
target
、source
、およびenv
引数が必要であると書かれています。これらのアクション関数にはこれらがありませんが、とにかく機能します。どうして?
コードは次のとおりです。
#!/usr/bin/python
Default(None)
def h(env):
x = env.Program("hello1", "hello1.c")
y = env.Program("hello2", "hello2.c")
return 0
def h3(env):
y = env.Program("hello3", "hello3.c")
return 0
env = Environment()
env.AddMethod(h, "HELLO")
env.AddMethod(h3, "HELLO3")
env.Alias("h", ["hello1", "hello2"], env.HELLO())
env.Alias("h3", ["hello3"],env.HELLO3())