为了调试一个复杂的 XSLT 转换,我将它分成几个部分:首先我构建%.1.xml,然后我用它来构建%.2.xml,最后我构建%.3.xml. 一切正常,但是如果我要求 Make 构建最后一个,那么 Make 总是会删除中间的%.1.xml和%.2.xml,而我宁愿保留它们。我试图将所有.xml文件标记为.PRECIOUS:
.PRECIOUS: %.xml
Run Code Online (Sandbox Code Playgroud)
但这似乎不起作用。(我也尝试使用%.1.xmland %.2.xml,但这也不起作用。然后我尝试以.SECONDARY相同的方式将它们标记为相同的负面结果。它不删除中间文件的唯一方法是当文件已经存在;在这种情况下,它只重建它们。但如果文件不存在,它总是删除它们。
我错过了什么?
GNU 制作 4.1。
更新: Makefile,>>代表TAB:
sample-%.1.xml: sample-%.0.xml job.1.xslt job.xslt
>> xsltproc $(filter %.1.xslt,$^) $(filter %.xml,$^) > $@
sample-%.2.xml: sample-%.1.xml job.2.xslt job.xslt
>> xsltproc $(filter %.2.xslt,$^) $(filter %.xml,$^) > $@
sample-%.3.xml: sample-%.2.xml job.3.xslt job.xslt
>> xsltproc $(filter %.3.xslt,$^) $(filter %.xml,$^) > $@
.SECONDARY: %.xml # or .PRECIOUS: %.xml
Run Code Online (Sandbox Code Playgroud)
它工作正常,重建一切或建立所需的中间文件,但是当记者问到构建.3.xml和.1.xml和.2.xml不存在的,它建立它们,然后在最后删除。如果.1.xml存在,但.2.xml不存在,它将重建所有并删除.2.xml。当然,这不是一个表演障碍,但我想了解:)