gpt4 book ai didi

caching - 将环境状态显式附加到 SCons Builder 依赖项 MD5 指纹

转载 作者:行者123 更新时间:2023-12-02 21:14:10 25 4
gpt4 key购买 nike

我已修改 SCons Builder 操作以使用 subprocess.Popen() 而不是 env.Execute()。但我仍然需要向 env 的内容添加一些 md5-sum 依赖项检查,以便它重建并缓存新的目标文件。如何附加到 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.Value 添加字符串值的依赖项:

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.

关于caching - 将环境状态显式附加到 SCons Builder 依赖项 MD5 指纹,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25663617/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com