在Makefile模式规则中依赖生成器程序的可移植方法

在Makefile模式规则中依赖生成器程序的可移植方法,makefile,Makefile,我有一个src/apps/myapp/myapp程序,作为汽车制造规则的一部分,我正在构建该程序,该程序运行正常 然后,我在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
程序,作为汽车制造规则的一部分,我正在构建该程序,该程序运行正常

然后,我在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
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
致:


这按预期工作,但依赖于GNU make扩展。我能以可移植的方式执行此操作吗?

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

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

您不显示任何HTML文件列表,但如果变量中有一个(例如,
$(HTMLFILES)
),则可以声明:

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

这将起作用(并且是可移植的)。

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

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

您不显示任何HTML文件列表,但如果变量中有一个(例如,
$(HTMLFILES)
),则可以声明:

$(HTMLFILES): src/apps/myapp/myapp
这将起作用(并且是可移植的)

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