首页 > 解决方案 > 一个先决条件中的目标数量未知?

问题描述

我有一个进程,它接受一个输入文件(称为 test.in)并生成一些输出文件(模式名称 test-[0-9]?.out)。该过程应始终生成至少 1 个输出文件 (test-1.out),但输出文件的数量将取决于输入文件的内容(随着每个后续输出文件的数量顺序增长)。有没有办法在 make 规则中捕获这种依赖关系,或者我是否需要满足于仅列出保证的第一个目标(使用它来确定过期状态)并将此表单的所有文件的删除写入明确配方?

标签: makefile

解决方案


从问题中发布我提出的解决方案(基于@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 模式),因此一旦配方完成,只有新的文件存在(尤其是如果更新减少了输出文件的数量,这很重要)。


推荐阅读