我有一个进程,它接收一个输入文件(称其为test.in),并产生一些输出文件(模式名称为test-[0-9]?.out)。 这个过程应该至少产生一个输出文件(test-1.out),但是输出文件的数量取决于输入文件的内容(在随后的每一个输出文件中,输出文件的数量依次增加)。 有没有办法在make规则中捕获这种依赖性,或者我是否需要满足于只列出那个保证的第一个目标(用它来确定过时状态),并将删除所有这种形式的文件显式写入配方中?
贴出我从问题中提出的解决方案(根据@Beta的评论和它的上票数似乎是合理的)。
只命名有保证的第一个目标,并让该目标的配方删除模式中的其他文件。
test-1.out : test.in
-rm test-[0-9].out test-[0-9][0-9].out
<rest of recipe to produce all test-*.out files from test.in>
在这种情况下,test-1.out的状态被用来作为所有输出文件状态的替身。 如果它是过时的,那么它们都是过时的。 配方的第一行保证删除所有的输出文件(直到test-99.out,如果产生的文件多于需要额外的globbing模式),这样一旦配方完成,只有新的文件存在(如果更新减少了输出文件的数量,这一点尤其重要)。