在我的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
。
答案 0 :(得分:1)
如果您的两个文件确实确实像示例中一样具有相同的词干,则可以使用:
%1 %2: deps
make_files
模式规则与显式规则不同,它假设一次调用配方将创建所有目标模式。