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

Makefile 独立生成两个文件的制作配方,makefile,gnu-make,Makefile,Gnu Make,在我的makefile中,我有一个生成两个文件的配方。如果这两个文件中的任何一个已过期,则配方应运行一次。比如说: file1 file2 : deps make_files 请注意,make_files命令始终生成这两个文件,其调用不依赖于目标(即,我们在其调用中不使用目标名称或任何词干) 问题是make将此解释为两个规则,一个用于file1,另一个用于file2,如果两个文件都丢失(例如,在使用make-j时),它可能会运行两次make\u文件(make_files实际上正在调用另

在我的makefile中,我有一个生成两个文件的配方。如果这两个文件中的任何一个已过期,则配方应运行一次。比如说:

file1 file2 : deps
    make_files
请注意,
make_files
命令始终生成这两个文件,其调用不依赖于目标(即,我们在其调用中不使用目标名称或任何词干)

问题是make将此解释为两个规则,一个用于
file1
,另一个用于
file2
,如果两个文件都丢失(例如,在使用
make-j
时),它可能会运行两次
make\u文件(
make_files
实际上正在调用另一个子目录中的
make
,如果同时调用两次,则此操作不起作用)

任何修复,例如告诉
make
只运行
make\u文件一次

现在我使用的黑客方法是使
file2
依赖
file1
,即使它不:

file2 : file1

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

如果您的两个文件确实像示例中那样共享一个公共stem,那么您可以使用:

%1 %2: deps
        make_files

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

有关此问题的最终S.O.答案,请参阅。您愿意拥有一个虚拟文件,其唯一功能是具有时间戳吗?@Beta-是的,我愿意。这些文件有一个共同的“中间部分”。实际名称是
libpfc.so
pfc.ko
。因此,我猜这不起作用?@Beta-好的,对,但前提是我没有任何其他
。so
.ko
文件正在这个Makefile中构建,对吗?如果您使用显式或静态模式规则来构建其他
。所以
/
.ko
的目标是你不会干涉的。