【发布时间】:2018-07-18 20:42:44
【问题描述】:
在我的 makefile 中,我有一个生成两个文件的配方。如果这两个文件中的任一个 已过期,则配方应该运行一次。所以是这样的:
file1 file2 : deps
make_files
请注意,make_files 命令始终会生成两个文件,并且它的调用不依赖于目标(即,我们在其调用中不使用目标名称或任何词干)。
问题在于,make 将此解释为两条规则,一条用于 file1,一条用于 file2,如果两者都缺失(例如,使用 make -j 时),它可能会运行两次 make_files,这爆炸了(make_files 实际上是在另一个子目录中调用make,如果同时调用两次,这将不起作用)。
任何修复,例如告诉make 只运行一次make_files?
现在我使用的 hack 是让 file2 依赖于 file1,即使它没有:
file2 : file1
这会导致make 序列化make_files 调用。但是,这并不总是很好用:如果两个文件都丢失了,它将运行make_files 一次来生成它们,但是如果file2 的时间戳比file1 晚,它将运行@ 987654340@再次。
【问题讨论】:
-
查看stackoverflow.com/q/2973445/761374 了解最终的 S.O.这个问题的答案。
-
你愿意拥有一个只有时间戳的虚拟文件吗?
-
@Beta - 是的,我愿意。