發現一個規律,凡是在上一級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