Makefiles是否支持基于文件是否存在的某种条件依赖关系?

Makefiles是否支持基于文件是否存在的某种条件依赖关系?,makefile,gnu-make,Makefile,Gnu Make,例如,我想做这样的事情: %.o: %.fast.c # Prefer this if %.fast.c exists $(CC) $(FASTFLAGS) $< -o $@ %.o: %.slow.c # Only if %.fast.c does not exist $(CC) $(SLOWFLAGS) $< -o $@ %.o:%.fast.c#如果存在%

例如,我想做这样的事情:

%.o: %.fast.c                       # Prefer this if %.fast.c exists
        $(CC) $(FASTFLAGS) $< -o $@

%.o: %.slow.c                       # Only if %.fast.c does not exist
        $(CC) $(SLOWFLAGS) $< -o $@
%.o:%.fast.c#如果存在%.fast.c,则首选此选项
$(CC)$(FASTFLAGS)$<-o$@
%.o:%.slow.c#仅当%.fast.c不存在时
$(CC)$(SLOWFLAGS)$<-o$@
这可能吗?

如果make找不到(并且无法构建)模式规则的先决条件,则make将不使用该规则,而是使用另一个规则。考虑内置的规则,从各种来源(<代码> C.<代码> >代码> .CPP<代码> >代码> >代码> > > 请参阅makefile的一节,以了解有关此操作的更多详细信息


对于该手册章节,唯一需要注意的是,3.81之前的make没有最短阀杆规则。这是3.82中的一个新添加。

它应该检查
%.slow.c
是否也存在,还是假设它存在?@FiLeVeR10:假设它存在。但这并不重要,因为如果可以检查其中一个,那么就可以检查另一个。如果make无法构建(或找到)模式规则的先决条件,那么它将不会使用该规则(而将使用另一个规则)。想想从
.c
.cpp
.f
等文件中生成
.o
文件的规则。@EtanReisner:但是如果这两个文件都存在,我如何确保它总是选择
%.fast.c
而不是
%.slow.c
?第一个匹配规则应该优先(当茎的长度相等时)我相信。(长度仅为make 3.82+)也有很多关于这方面的信息,这一点也不奇怪。