不允许对Makefile中的变量进行进一步的值分配

时间:2019-06-18 11:19:29

标签: makefile

我要覆盖Makefile中变量的将来分配。

在下面的代码段中,我希望为DEFCONFIG分配$(src)/board/$(BOARD)/defconfig,而忽略了进一步的分配。

 ifdef BOARD && $(BOARD) == "abc"
 DEFCONFIG := $(src)/board/$(BOARD)/defconfig 
 endif

如果任何其他makefile重新定义了DEFCONFIG,则该值无效。 我该怎么办?

3 个答案:

答案 0 :(得分:0)

  

如果任何其他makefile重新定义DEFCONFIG,则该值无效。我该怎么办?

然后不要在其他makefile中重新定义它。

实现该目标的一种方法是分配一个特定于Makefile的变量,而不是分配给相同的变量DEFCONFIG

DEFCONFIG.$(BOARD) := $(src)/board/$(BOARD)/defconfig 
DEFCONFIG.def := ...
DEFCONFIG.xyz := ...

DEFCONFIG := ${DEFCONFIG.abc}

答案 1 :(得分:0)

  

如果任何其他makefile重新定义了DEFCONFIG,则该值无效。我该怎么办?

由于您似乎正在使用GNU make,因此可以使用?=运算符来分配其值。如果对该变量的所有赋值一致地执行此操作,则只有处理的第一个赋值才有效(如果变量从环境中获取值,则它们都不起作用)。

答案 2 :(得分:0)

在GNU中,您可以使用override关键字。

override DEFCONFIG := $(src)/board/$(BOARD)/defconfig

由于override的优先级最高,因此只能由另一个override覆盖。

但是,如果您必须使用它,则项目中肯定存在一些缺陷。