makefile之override

weixin_34185364發表於2018-09-17

override指示符

通常在執行 make 時,如果通過命令列定義了一個變數,那麼它將替代在 Makefile中出現的同名變數的定義。
就是說,對於一個在 Makefile 中使用常規方式(使用“=”、“:=”或者“define”)定義的變數,我們可以在執行 make 時通過命令列方式重新指定這個變數的值,命令列指定的值將替代出現在 Makefile 中此變數的值。
如果不希望命令列指定的變數值替代在 Makefile 中的變數定義,那麼我們需要在 Makefile 中使用指示符“override”來對這個變數進行宣告。

override作用

  1. 保護makefile中定義的變數的值;
  2. 提供一種在makefile中增加或者修改命令列引數的方式;

實際情況下,我們經常會有這種需求:通過命令列指定一些附加的引數選項,對於一些通用的引數選項在makefile中指定.

1 保護makefile中定義變數值示例

1.1 沒有使用override的情況

make命令列指定的變數值將會覆蓋makefile中定義的同名的變數值

SRCS := A.c B.c C.c

all:
    @echo "SRCS: " $(SRCS)

1.2 使用override的情況

make命令列指定的變數值將不會覆蓋makefile中定義的同名的變數值,所以override有保護makefile中變數值不被命令列引數修改的作用。

override SRCS := A.c B.c C.c

all:
    @echo "SRCS: " $(SRCS)
5619633-201ccb9ca77a1cae.png
image

2 修改makefile中定義變數值的示例

#使用override進行追加的變數的原來指定的值不會被命令列引數覆蓋,而且會追加命令列指定的值
override CFLAGS += -g

all:
    @echo $(CFLAGS)
5619633-4e07889994d09c91.png
image

相關文章