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

问题描述 投票:1回答:1

我有一个生成另一个Makefile的Makefile(称为Makefile.2),我想对其进行设置,以便如果我运行'make foo'并且Makefile没有foo规则,它将自动尝试$( MAKE)-f Makefile.2 foo。

有没有办法做到这一点?

makefile
1个回答
0
投票

这个答案很晚了,但是对于使用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上进行了测试。

© www.soinside.com 2019 - 2024. All rights reserved.