我在Automake中做了一些文件处理,无法弄清楚如何正确地执行它(使用gnu make扩展的automake规则)。例如,我有一个名为 refName.in 的文件,并希望生成输出 refName.out 。我有两个相关的命令行:
produce-out refName.in refName.out
produce-deps refName.in
第一个简单地获取输入文件并生成输出。第二个提供了文件的依赖项列表。
我应该在Automake中做些什么来使这个设置正常工作?我希望有完整的依赖关系跟踪,这样如果 produce-deps 生成的列表中的任何文件将触发 Produ-out 被调用。
(注意:更改这些命令的工作方式没有问题。如果需要,一个命令可以产生输出和依赖关系。也可以修改不同的命令行开关等。)
(PS:如果需要GNU make扩展是完全可以的。我已经在Makefile.am和其他扩展中使用了图案规则。)
答案 0 :(得分:3)
您需要的唯一具体功能是将构建的文件添加到BUILT_SOURCES
:
BUILT_SOURCES := refName.out
# You might well want refName.in in EXTRA_DIST
EXTRA_DIST := refName.in
# then any standard Make rules will do:
refName.out: refName.in $(shell produce-deps refName.in)
produce-out refName.in refName.out
如果你想要一种更复杂的依赖关系方式,你可以在GNU make的include
中使用这些规则,这只会导致在refName.deps缺失或refName.in更改时运行produce-deps:
refName.deps: refName.in
echo 'ref-deps := "' $(shell produce-deps refName.in) '"' > refName.deps
include refName.deps
refName.out: refName.in $(ref-deps)
produce-out refName.in refName.out
您可以使用通常的GNU制定%
规则make these rules generic。