Makefile 中向下傳參問題討論

發現一個規律,凡是在上一級Makefile中這樣執行:make -C xxx CFLAGS="$(CFLAGS)",那麼在 xxx/Makefile 中對 CFLAGS 的設置就會不生效。shell


作個實驗

建一個這樣的目錄:
spa

Makefile 的內容:code

CFLAGS=-I../xxx

all:
    @echo ---top:CFLAGS=$(CFLAGS)---
    make -C sub CFLAGS="$(CFLAGS)"

sub/Makefile 的內容:class

CFLAGS+=-L/usr/include

all:
    @echo ---sub:CFLAGS=$(CFLAGS)---

咱們在 sub/Makefile 中讓 CFLAGS 追加了 -L/usr/include
按理解,sub/Makefile 的輸出結果應該是:-I../xxx -L/usr/include,而實現輸出的內容是 -I../xxx變量

證實 sub/Makefile 中 CFLAGS+=-L/usr/include 根本就沒有生效。file


規避方法

那應該怎麼辦呢? 嘗試過了,將 Makefile 改爲這樣:方法

CFLAGS=-I../xxx
export CFLAGS

all:
    @echo ---top:CFLAGS=$(CFLAGS)---
    make -C sub

用 export 關鍵字來向下傳 CFLAGS 變量就能夠了。im


提問

就算是規避了,但這個現象的根本問題是什麼?如何解決?top

相關文章
相關標籤/搜索