Makefile将未知规则委托给另一个Makefile

Makefile将未知规则委托给另一个Makefile,makefile,Makefile,我有一个生成文件,它可以生成另一个生成文件(称为Makefile.2),我想对它进行设置,以便在运行“makefoo”并且Makefile没有foo规则时,它会自动尝试$(make)-f Makefile.2 foo 有什么方法可以做到这一点吗?这个答案已经很晚了,但是对于任何使用谷歌在这个问题上遇到障碍的人,我将提供一个答案 您可以使用注释中建议的@Gregory技巧,或者使用通配符规则实现相同的效果。不过,这需要一些修补 从对另一个问题的回答中,我了解到make在没有规则匹配时默认使用隐藏规

我有一个生成文件,它可以生成另一个生成文件(称为Makefile.2),我想对它进行设置,以便在运行“makefoo”并且Makefile没有foo规则时,它会自动尝试$(make)-f Makefile.2 foo


有什么方法可以做到这一点吗?

这个答案已经很晚了,但是对于任何使用谷歌在这个问题上遇到障碍的人,我将提供一个答案

您可以使用注释中建议的@Gregory技巧,或者使用通配符规则实现相同的效果。不过,这需要一些修补

从对另一个问题的回答中,我了解到make在没有规则匹配时默认使用隐藏规则。因此,对于第一个Makefile中可能使用的任何文件以及转发时需要的文件,必须显式禁用此默认规则。在我的例子中,它是一个
CMakeLists.txt
,在我转发到
Makefile.2
之前在第一个
Makefile
中处理

但这并不是全部。在我的例子中,我不得不为
Makefile
本身禁用所有规则,原因我不确定。如果不这样做,Makefile本身将作为目标转发到
Makefile.2
。其他人可能能够解释这一点,但重要的是它解决了这个问题

这就是结果。如果有人提出改进建议,我会更新我的答案

# Custom rules can be added here.
#
# Just make sure to disable the default rule for any files
# your wildcard rule might also use or you'll end up with
# a circular dependency.

Makefile:;

.PHONY: %

%:
  $(MAKE) -f Makefile.2 $@

该文件使用GNUmake 3.81在macOS Mojave上进行了测试。

谢谢!这太棒了。