從你所描述的,你應該同時使用一個發射器和一個發生器,就像你在問題結束時說的那樣。 「主」源/目標將成爲源/目標列表中的第一個元素。這似乎並不哈克給我,但我可能只是習慣了......
答案是從一個工作示例總是更好......
這裏是SConstruct做你的描述。我不確定你計劃如何計算some.foo
和some.bar
從input.foo
,所以在這個例子中我計算input.bar
和input.baz
從input.foo
,並且只是追加output.dir
到目標列表。
import os
def my_generator(source, target, env, for_signature):
command = './script '
command += ' '.join(['--special-in %s' % str(i) for i in source[1:]])
command += ' '
command += ' '.join([str(t) for t in target])
return command
def my_emitter(target, source, env):
source += ['%s%s' % (os.path.splitext(
str(source[0]))[0], ext) for ext in ['.bar', '.baz']]
target += ['output.dir']
return target, source
bld = Builder(generator=my_generator,
emitter=my_emitter)
env = Environment(BUILDERS={'Foo':bld})
env.Foo('output.foo', 'input.foo')
在Linux上運行...
>> touch input.bar input.baz input.foo
>> echo "#\!/bin/sh" > script && chmod +x script
>> tree
.
├── input.bar
├── input.baz
├── input.foo
├── SConstruct
└── script
0 directories, 5 files
>> scons --version
SCons by Steven Knight et al.:
script: v2.3.4, 2014/09/27 12:51:43, by garyo on lubuntu
engine: v2.3.4, 2014/09/27 12:51:43, by garyo on lubuntu
engine path: ['/usr/lib/scons/SCons']
Copyright (c) 2001 - 2014 The SCons Foundation
>> scons
scons: Reading SConscript files ...
scons: done reading SConscript files.
scons: Building targets ...
./script --special-in input.bar --special-in input.baz output.foo output.dir
scons: done building targets.
全部依賴/目標將保持不變,如果你需要從一個建設者這樣喂輸出到另一個。
如果這不能回答你的問題,請說明你想要做的更多。
目前還不清楚你想達到什麼目的。你可以發佈一個例子(或幾個)你的Builder調用應該如何看起來像理想,以及應該由它產生的命令行嗎?在上面的例子中,我只看到了輸入文件和基本上你聲稱覆蓋的「some。*」文件。所以我想知道你的「特殊」選項在哪裏發揮作用...... – dirkbaechle