像OP(詹姆斯·伦纳德)一样,我想抑制或避免有关覆盖的警告Makefile
目标。然而,我的情况和目标不同。
I want Makefile
to include base.mk
, 而且我要Makefile
能够覆盖目标base.mk
没有任何警告消息。我正在使用 GNU Make。
GNU Make 文档描述了一种执行此操作的方法:
Create Makefile
如下:
foo:
echo 'bar' > foo
%: force
@$(MAKE) -f base.mk $@
force: ;
来源:https://www.gnu.org/software/make/manual/html_node/Overriding-Makefiles.html https://www.gnu.org/software/make/manual/html_node/Overriding-Makefiles.html
上面的方法有一个(可能很严重的)缺点,它会调用一个单独的实例$(MAKE)
,这意味着(部分或全部?)变量可能(将?)不会在 make 的父级调用和子级调用之间共享。
令人高兴的是,我找到了更好的解决方案,如下所示:
Create base.mk
如下:
foo-default:
echo 'foo-default'
bar-default:
echo 'bar-default'
%: %-default
@ true
Create Makefile
如下:
include base.mk
foo:
echo 'foo Makefile'
输出示例:
$ make foo
echo 'foo Makefile'
foo Makefile
$ make bar
echo 'bar-default'
bar-default
请注意,您需要能够控制中的目标名称base.mk
以便你可以命名它们<target>-default
。换句话说,您不能使用此方法来扩展任意基本 makefile。但是,如果你同时控制两者base.mk
and Makefile
,这种方法将允许您创建一个base.mk
然后对其进行许多定制。