2
我修改了我的SCons Builder
操作使用subprocess.Popen()
而不是env.Execute()
。但我仍然需要對env
的內容添加一些md5-sum依賴項檢查,以便重建和緩存新的目標文件。我如何附加到SCons內部MD5哈希?顯式將環境狀態附加到SCons生成器依賴項MD5指紋
我修改了我的SCons Builder
操作使用subprocess.Popen()
而不是env.Execute()
。但我仍然需要對env
的內容添加一些md5-sum依賴項檢查,以便重建和緩存新的目標文件。我如何附加到SCons內部MD5哈希?顯式將環境狀態附加到SCons生成器依賴項MD5指紋
假設你有一個使用環境變量建設者:
# Just an example. The point is that the output of this function
# depends upon an environment variable
def bld_func(target, source, env):
with open(str(target[0]), 'w') as f:
f.write(' '.join(str(t) for t in target) + '\n')
f.write(' '.join(str(s) for s in source) + '\n')
f.write(env.subst('$MY_VAR') + '\n')
bld = Builder(action=bld_func)
和調用SConstruct它:
env = Environment()
env['BUILDERS']['BLD'] = bld
env.BLD('output.txt', 'input.txt', MY_VAR=ARGUMENTS['MY_VAR'])
此構建不會,如果你更改值重新執行MY_VAR的:
$ scons -Q MY_VAR=cc output.txt
bld_func(["output.txt"], ["input.txt"])
$ scons -Q MY_VAR=gcc output.txt
scons: `output.txt' is up to date.
但是,你可以添加一個字符串與值的依賴:
env.Depends('output.txt', env.Value(env.subst('$MY_VAR')))
邏輯的地方把這樣的關係在一個發射器:
def bld_emitter(target, source, env):
env.Depends(target, env.Value(env.subst('$MY_VAR')))
return target, source
bld = Builder(action=bld_func, emitter=bld_emitter)
完全SConstruct:
# Create a builder that depends upon an environment variable
def bld_func(target, source, env):
with open(str(target[0]), 'w') as f:
f.write(' '.join(str(t) for t in target) + '\n')
f.write(' '.join(str(s) for s in source) + '\n')
f.write(env.subst('$MY_VAR') + '\n')
def bld_emitter(target, source, env):
env.Depends(target, env.Value(env.subst('$MY_VAR')))
return target, source
bld = Builder(action=bld_func, emitter=bld_emitter)
# Attach it to an environment
env = Environment()
env['BUILDERS']['BLD'] = bld
# Invoke the builder
env.BLD('output.txt', 'input.txt', MY_VAR=ARGUMENTS['MY_VAR'])
輸出示例:
$ scons -Q MY_VAR=cc output.txt
bld_func(["output.txt"], ["input.txt"])
$ scons -Q MY_VAR=gcc output.txt
bld_func(["output.txt"], ["input.txt"])
$ scons -Q MY_VAR=gcc output.txt
scons: `output.txt' is up to date.
感謝你徹底的答案! – 2014-10-05 12:51:58