我有一个生成另一个Makefile的Makefile(称为Makefile.2),我想对其进行设置,以便如果我运行'make foo'并且Makefile没有foo规则,它将自动尝试$( MAKE)-f Makefile.2 foo。
有没有办法做到这一点?
这个答案很晚了,但是对于使用Google在这个问题上绊脚石的任何人,我都会提供答案。
您可以使用注释中建议的技巧@Gregory,或使用通配符规则实现相同的效果。不过,这需要一些修补。
从另一个问题的答案中,我了解到make在没有规则匹配时默认使用隐藏规则。因此,您必须为第一个Makefile中可能使用的所有文件明确禁用此默认规则,并且在转发时需要使用这些文件。就我而言,是CMakeLists.txt
在转发到Makefile
之前在第一个Makefile.2
中进行了处理。
虽然还不是全部。就我而言,出于不确定的原因,我不得不禁用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上进行了测试。