执行make时,命令行定义了一个变量(make variable=AAA),那么它将替代在Makefile中出现的同名变量的定义。对于一个在Makefile中使用常规方式(使用“=”、“:=”或者“define”)定义的变量,我们可以在执行make时通过命令行方式重新指定这个变量的值,命令行指定的值将替代出现在Makefile中此变量的值**。如果不希望命令行指定的变量值替代在Makefile中的变量定义,那么我们需要在Makefile中使用指示符“override”来对这个变量进行声明**,像下边那样:
override <variable> = <value>
override <variable> := <value>
override <variable> += <value>
对于追加方式需要说明的是:变量在定义时使用了“override”,则后续对它值进行追加时,也需要使用带有“override”指示符的追加方式。否则对此变量值的追加不会生效。
example:
#Makefile内容 (没有用override)
SRCS := programA.c programB.c programC.c
all:
@echo "SRCS: " $(SRCS)
# bash中运行make
$ make SRCS=nothing
SRCS: nothing
#################################################
# Makefile内容 (用override)
override SRCS := programA.c programB.c programC.c
all:
@echo "SRCS: " $(SRCS)
# bash中运行make
$ make SRCS=nothing
SRCS: programA.c programB.c programC.c
https://blog.csdn.net/passerbysrs/article/details/45338621?utm_medium=distribute.pc_relevant.none-task-blog-baidujs_utm_term-2&spm=1001.2101.3001.4242
代码案例:
MAKEFILE_PRODUCT := $(PFM_PRODUCTS_PATH)/$(PRODUCT_NAME)/Makefile.product
ifneq ($(MAKEFILE_PRODUCT), $(wildcard $(MAKEFILE_PRODUCT)))
PRODUCT_LIST := $(notdir $(shell find $(PFM_PRODUCTS_PATH)/ -maxdepth 1 -type d))
PRODUCT_LIST := $(sort $(filter-out solutions, $(PRODUCT_LIST)))
PRODUCT_LIST := $(PRODUCT_LIST:%=<%>)
override PRODUCT := $(shell read -p "Please select PRODUCT= [ ${PRODUCT_LIST} ]:" PRODUCT; echo $$PRODUCT)