我正在构建一个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扩展。我能以便携的方式做到这一点吗?
答案 0 :(得分:1)
后缀规则不支持额外的先决条件。根据POSIX标准,它们被忽略了。
当然,您可以随时声明任何目标/先决条件关系,不必在包含配方的规则中声明它们。
您不会显示任何HTML文件列表,但如果您在变量中有一个(例如$(HTMLFILES)
),那么您只需声明:
$(HTMLFILES): src/apps/myapp/myapp
这将起作用(并且可以移动)。