Makefile 来自一个先决条件的目标数未知?

Makefile 来自一个先决条件的目标数未知?,makefile,Makefile,我有一个进程,它接收一个输入文件(称为test.in)并生成一些输出文件(模式测试的名称-[0-9]?.out”)。该过程应始终至少生成一个输出文件(test-1.out),但输出文件的数量将取决于输入文件的内容(每个后续输出文件的数量将按顺序增长)。有没有一种方法可以在make规则中捕获这种依赖关系,或者我需要满足于只列出保证的第一个目标(使用它来确定过期状态),并将删除此表单中的所有文件明确写入配方?从问题中发布我建议的解决方案(基于@Beta的评论和它的支持票,这似乎是合理的): 仅命名保

我有一个进程,它接收一个输入文件(称为test.in)并生成一些输出文件(模式测试的名称-[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.in
-rm测试-[0-9]。输出测试-[0-9][0-9]。输出

在这种情况下,test-1.out的状态用作所有输出文件状态的替代。如果它已过期,则它们都已过期。配方的第一行保证删除所有输出文件(直到test-99.out,如果生成的文件超过了需要的其他全局模式)因此,配方完成后,只有新的配方存在(如果更新减少了输出文件的数量,这一点尤为重要)。

该解决方案听起来不错。另一种方法是生成输出文件的存档(tar或zip),但这可能会使使用变得复杂,因为您很可能需要在使用前提取文件。嗯……可能不是存档,而是常规文件夹。文件夹是否可以成为makefile规则的目标?是的,但最新的检查会变得奇怪,因为文件夹在文件系统上的工作方式。您必须声明该文件夹为虚假文件夹,并解决它始终是rema顺便说一句,请确保标记您回复的人,例如“@Andreas Hmm…可能不是存档…”。否则我不会收到您尝试讨论的通知。@Andreas啊,好吧,所以目录的想法只有在我没有将其用于任何其他用途(不仅在makefile中,也在系统的其他地方)的情况下才会合理地起作用。这将很难跟踪,因为我需要能够使用输出文件。大多数情况下,这只是读取它们,但你永远不知道它们何时会被触摸或意外修改。