如何覆盖makefile的规则

时间:2017-02-17 07:40:52

标签: makefile gnu-make

我们当前的系统为每个项目都有一个Makefile,它只定义变量并包含一个包含所有规则的公共(Make.def)。

我试图更改常见的Makefile(Make.def)并添加覆盖某些规则的可能性:

我的想法是将Makefiles包含在从最常见到具体的部分中:

-include ./make.rules.rpm
-include ./make.rules.rpm.$(TARGET_ARCH)
-include ./make.rules.rpm.$(TARGET_ARCH).$(PROJECT_NAME)

当我使用这种方法时,我实现了我的目标,但发出了Makefile的警告:

make.rules.rpm。

x86:2: warning: overriding commands for target `rpm'
make.rules.rpm:9: warning: ignoring old commands for target `rpm'

到目前为止,我已经阅读过它无法抑制此警告,也无法取消现有规则。

所以我尝试下一个方法:

ifeq ($(shell test -e ./make.rules.rpm.$(TARGET_ARCH) && echo -n yes),yes)
    include ./make.rules.rpm.$(TARGET_ARCH)
else
    include ./make.rules.rpm
endif

我只包括一个,更具体。这意味着我必须编写所有规则:

在这个例子中,make.rules.rpm必须遵守规则:

spec: 
(...)
rpm:
(...)

也许我只需要覆盖规范规则,但保持与原始规则相同的rpm规则。

所以,这是我的问题:如何使用外部Makefile覆盖Makefile上已经定义的规则而不保留原始的重新定义规则?

0 个答案:

没有答案