2015-04-17 41 views
1

我正在寫一個makefile以供學生分發。爲了緩解他們的黑客體驗,我想對未初始化的變量進行警告。如何在makefile中設置長選項

我知道有這個選項--warn-undefined-variables可以做到這一點,當然,我可以添加一個別名別名make =「make --warn-undefined-variables」給我的.bashrc 。但是我想在makefile中設置這個選項,這樣當學生開始擴展makefile時,他們也會自動從這些警告中獲益。 這樣做的邏輯方法是MAKEFLAGS變量。然而,儘管它適用於短選項,我不能在Can make warn me, when I use unset variables?

的Makefile描述它與--warn-不確定變量工作:

MAKEFLAGS=--warn-undefined-variables 
$(info MAKEFLAGS: $(MAKEFLAGS)) 
$(info ${BAR}) 

電話:

$ make 
MAKEFLAGS: --warn-undefined-variables 
make: *** No targets. Stop. 

$ make --warn-undefined-variables 
MAKEFLAGS: --warn-undefined-variables 
Makefile:3: warning: undefined variable 'BAR' 
make: *** No targets. Stop. 

當我將MAKEFLAGS更改爲-d控制檯充斥着調試信息,所以我知道MAKEFLAGS設置正確。有什麼建議麼?

+0

你將會淹沒像'TARGET_ARCH'和'LOADLIBES'這樣的未設置變量的虛假警告。 – Wintermute

+0

這取決於他是否使用內置規則來處理任何事情,我認爲。 –

回答

1

我有GNU make 4.0在這裏,我不能爲我的生活得到使用一個簡單的Makefile兌現MAKEFLAGS= --warn-undefined-variables。但是,如果我使Makefile自行調用,那麼MAKEFLAGS= --warn-undefined-variables在子調用中起作用!

MAKEFLAGS= --warn-undefined-variables 
$(info MAKEFLAGS: $(MAKEFLAGS)) 
$(info $(BAR)) 

# This prevents a warning if we invoke make without a target... 
MAKECMDGOALS?= 

all: 
ifndef RECURSED 
    $(MAKE) RECURSED=1 $(MAKECMDGOALS) 
else 
    echo $(FOO) 
endif 

如果我只是運行make,我得到:

MAKEFLAGS: --warn-undefined-variables 

make RECURSED=1 
make[1]: Entering directory '/tmp/t1' 
MAKEFLAGS: --warn-undefined-variables 
Makefile:3: warning: undefined variable 'BAR' 

Makefile:12: warning: undefined variable 'FOO' 
echo 

make[1]: Leaving directory '/tmp/t1' 

要麼我borking的東西...或者是一個錯誤的化妝。我傾向於認爲後者。