在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