SCons で一つのソースから複数のターゲットを作るときにうまくいかないのでテストしてみる.
def XXXBuilder():
return Builder(action = "perl xcommand $SOURCES")
def YYYBuilder():
return Builder(action = "perl ycommand $SOURCES")
env = Environment(BUILDERS = { "XXX": XXXBuilder(), "YYY": YYYBuilder() })
env.XXX("src.aaa.xxx", "src.aaa")
env.YYY("src.aaa.yyy", "src.aaa")
ここで,xcommand file は file から file.xxx を生成,また,ycommand file は file から file.yyy を生成.
これを実行するとうまくいった.
うまくいかないと思い込んでいたのは,
env.XXX(None, "src.aaa")
env.YYY(None, "src.aaa")
のようにしていたため.このようにしていたのは,この場合の一つのコマンドが一つのソースから複数のターゲットを生成するのに対応しようとしたため.(→そうではなく,scons -c で消去されないようにするためだった)
あらためて,一つのコマンドで一つのファイルから複数のターゲットを生成する方法を検証してみると,以下で全く問題なかった(もちろん xcommand で .xxx と .yyy を生成するようにした上で).
env.XXX(["src.aaa.xxx", "src.aaa.yyy"], "src.aaa")