制作配方可独立生成两个文件

时间:2018-07-18 20:42:45

标签: makefile gnu-make

在我的makefile文件中,有一个配方可以产生两个文件。如果这两个文件中的 已过期,则配方应运行一次。像这样:

file1 file2 : deps
    make_files

请注意,make_files命令始终生成两个文件,并且其调用不依赖于目标(即,我们在其调用中不使用目标名称或任何主干)。

问题在于,make将其解释为两个规则,一个规则适用于file1,另一个规则适用于file2,如果两个规则都不存在,则可能会运行两次make_files(例如,当使用make -j)崩溃了(make_files实际上是在另一个子目录中调用make,如果同时调用两次,则无法正常工作)。

是否有任何修复程序,例如告诉make仅运行一次make_files

现在,我正在使用的技巧是使file2依赖于file1,即使事实并非如此:

file2 : file1

这将导致make序列化make_files调用。但是,这并不总是能很好地工作:在两个文件都丢失的情况下,它将运行一次make_files来制作它们,但是如果file2的时间戳晚于file1 ,它将再次运行make_files

1 个答案:

答案 0 :(得分:1)

如果您的两个文件确实确实像示例中一样具有相同的词干,则可以使用:

%1 %2: deps
        make_files

模式规则与显式规则不同,它假设一次调用配方将创建所有目标模式。