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

Do Makefiles support some sort of conditional dependencies based on whether a file exists?

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

%.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 $@

这可能吗?

如果 make 找不到(也无法构建)模式规则的先决条件,那么 make 将不会使用该规则,而是使用另一个规则。考虑从各种来源构建 .o 文件的内置规则(.c.cpp.f 等等)。

有关此内容的更多详细信息,请参阅 makefile 的 How Patterns Match 部分。

该手册部分唯一需要注意的是,3.81 之前的 make 没有最短词干规则。这是 3.82 中新增的内容。