Waf:如何输出生成的文件?
我有一个文件,想在通过一个Python脚本处理后,把它发送到构建目录。请问在waf中该怎么做?
比如说,我有一个这样的文件:
VERSION=%%VERSION%%
DATADIR=%%DATADIR%%
我想在把它输出到waf构建目录之前,替换掉%%VERSION%%和%%DATADIR%%,我该怎么做呢?
我知道大概是这样的:
ctx(rule='???'
source='versionfile.ver',
target='versionfile.out'
)
但我不太清楚具体的规则是什么。
另外,一旦这个文件生成后,能不能在其他任务中使用它呢?
1 个回答
4
如果你只是想替换一个输入文件,你的版本文件 versionfile.ver 应该像这样:
VERSION=@VERSION@
DATADIR=@DATADIR@
现在你可以使用以下任务,这样值就会被替换了。
bld.new_task_gen (
features = "subst",
source= "versionfile.ver",
target= "versionfile.out",
VERSION = bld.env['VERSION'],
DATADIR = bld.env['DATADIR'])
为了能够在 bld 中访问版本信息,你需要在配置时定义它。
conf.env['VERSION'] = '0.7.0'
你可以在 这里 找到这个 waf 任务的实际应用。这个任务的输出文件可以作为其他任务的输入。
不过,当你想通过 Python 脚本或任何可用命令传递你的源文件时,可以使用以下内容:
lib_typelib = bld.new_task_gen(
name = 'versionfile',
source = 'versionfile.ver',
target = 'versionfile.out',
rule='/path/to/your/python/script ${SRC} -o ${TGT}')
这里还有一个示例,在这里,在这个例子中使用了 g-ir-compiler,而在你的情况下可以用 Python 脚本来替代。