在配置步骤中使用 "subst" 功能

Use "subst" feature in configure step

waf 具有复制文件的subst 功能。在构建上下文中,它可以像这样使用:

def build(bld):
    bld(features='subst', source='wscript', target='wscript_copy', is_copy=True)

但我需要在 configure 步骤中使用 subst 功能:

def configure(conf):
    conf(features='subst', source='wscript', target='wscript_copy', is_copy=True)

但这是不可能的,因为 configure 没有 BuildContext:

TypeError: 'ConfigurationContext' object is not callable

有没有办法让它工作?

ConfigureContext 不是为了使用任务。

如果你真的需要它,你可以按照conf.check()方法做同样的事情(见waf书§10.4.2)。它使用 waflib.Configure.run_build(self, *k, **kw),不完全是 public。请参阅 waflib.Tools.c_config 以了解 check() 的使用。

对我来说,这似乎是不必要的复杂性。如果您只需要复制文件来设置您的工作区,请使用普通 python.

from shutil import copyfile

def configure(conf):
    copyfile('wscript', 'wscript_copy')

构建部分使用任务管理和任务依赖项来构建需要的东西。

如果您需要替换 env 变量,您可以在 waf 工具中对其进行编码,以便像这样使用:

def configure(conf):
    conf.load("mysubst")
    conf.substitute(wscript', 'wscript_copy')