1. makefile中 override 的一二事:
新建Makefile,内容如:
EXTRA_CFLAGS := -fPIC -O3
EXTRA_CFLAGS += -DTEST
all: clean
.PHONY:clean
clean:
@echo $(EXTRA_CFLAGS)
1.1 Makefile中不使用override,命令行中的宏定义是老大、Makefile中的宏定义在老大面前啥都不是
见例子验证
>make
输出 -fPIC -O3 -DTEST
>make EXTRA_CFLAGS=AAAAAA
输出 AAAAAA
>make EXTRA_CFLAGS:=AAAAAA
输出 AAAAAA
>make EXTRA_CFLAGS?=AAAAAA
输出 AAAAAA
>make EXTRA_CFLAGS+=AAAAAA
输出 AAAAAA
1.2 命令行中的宏定义还是老大,Makefile里加了override的那处需要根据是“:=”、“=”,“?=”,“+=”,属性,要么收老大做小弟(+=),要么直接干掉老大(:= 、=),要么主动让位(?=),其他地方在老大面前还是啥都不是
修改Makefile,即其中加override
1.2.1 注意 override后面使用的是 += ,这样可以把老大收做小弟。***
EXTRA_CFLAGS := -fPIC -O3
override EXTRA_CFLAGS += -DTEST
all: clean
.PHONY:clean
clean:
@echo $(EXTRA_CFLAGS)
见例子验证
>make
输出 -fPIC -O3 -DTEST
>make EXTRA_CFLAGS=AAAAAA
输出 AAAAAA -DTEST
>make EXTRA_CFLAGS:=AAAAAA
输出 AAAAAA -DTEST
>make EXTRA_CFLAGS?=AAAAAA
输出 AAAAAA -DTEST
>make EXTRA_CFLAGS+=AAAAAA
输出 AAAAAA -DTEST
1.2.2 注意 override后面使用的是 = ,这样可以把老大给干掉了***
EXTRA_CFLAGS := -fPIC -O3
override EXTRA_CFLAGS = -DTEST
all: clean
.PHONY:clean
clean:
@echo $(EXTRA_CFLAGS)
见例子验证
>make
输出 -DTEST
>make EXTRA_CFLAGS=AAAAAA
输出 -DTEST
>make EXTRA_CFLAGS:=AAAAAA
输出 -DTEST
>make EXTRA_CFLAGS?=AAAAAA
输出 -DTEST
>make EXTRA_CFLAGS+=AAAAAA
输出 -DTEST
1.2.3 注意 override后面使用的是 := ,这样也可以把老大给干掉了***
EXTRA_CFLAGS := -fPIC -O3
override EXTRA_CFLAGS := -DTEST
all: clean
.PHONY:clean
clean:
@echo $(EXTRA_CFLAGS)
见例子验证
>make
输出 -DTEST
>make EXTRA_CFLAGS=AAAAAA
输出 -DTEST
>make EXTRA_CFLAGS:=AAAAAA
输出 -DTEST
>make EXTRA_CFLAGS?=AAAAAA
输出 -DTEST
>make EXTRA_CFLAGS+=AAAAAA
输出 -DTEST
1.2.4 注意 override后面使用的是 ?= ,这样主动让位***
EXTRA_CFLAGS := -fPIC -O3
override EXTRA_CFLAGS ?= -DTEST
all: clean
.PHONY:clean
clean:
@echo $(EXTRA_CFLAGS)
见例子验证
>make
输出 -fPIC -O3
>make EXTRA_CFLAGS=AAAAAA
输出 AAAAAA
>make EXTRA_CFLAGS:=AAAAAA
输出 AAAAAA
>make EXTRA_CFLAGS?=AAAAAA
输出 AAAAAA
>make EXTRA_CFLAGS+=AAAAAA
输出 AAAAAA