Waf:如何输出生成的文件?

3 投票
1 回答
1471 浏览
提问于 2025-04-17 07:55

我有一个文件,想在通过一个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 脚本来替代。

撰写回答