依赖于Makefile模式规则中的生成器程序的便携方式

时间:2013-06-09 10:00:24

标签: makefile

我正在构建一个src/apps/myapp/myapp程序作为automake规则的一部分,该程序运行正常。

然后我在Makefile规则中使用它来生成HTML文件,例如:

.src.html: src/apps/myapp/myapp
    src/apps/myapp/myapp --html $< > /tmp/generated && \
        mv /tmp/generated $@

html: data/src/example.html src/apps/myapp/myapp

这样可以在运行时构建src/apps/myapp/myapp并从data/src/example.html生成data/src/example.src

make html

data/src/example.src发生变化时,它会正确地重新生成data/src/example.html

问题是,如果src/apps/myapp/myapp发生更改,则不会重新生成data/src/example.html。此外,src/apps/myapp/myapp程序是在HTML文件之后构建的(即它仅使用html目标依赖项而不是.src.html规则依赖项。)

更新

使用GNU Make,我可以改变:

.src.html: src/apps/myapp/myapp

为:

%.html : %.src src/apps/myapp/myapp

这可以按预期工作,但依赖于GNU make扩展。我能以便携的方式做到这一点吗?

1 个答案:

答案 0 :(得分:1)

后缀规则不支持额外的先决条件。根据POSIX标准,它们被忽略了。

当然,您可以随时声明任何目标/先决条件关系,不必在包含配方的规则中声明它们。

您不会显示任何HTML文件列表,但如果您在变量中有一个(例如$(HTMLFILES)),那么您只需声明:

$(HTMLFILES): src/apps/myapp/myapp

这将起作用(并且可以移动)。