[英]makefile: fail on single make target if variable empty
我是構建Makefile的新手,正在嘗試確定如果變量為空的構建目標將如何失敗。 我希望能夠將變量作為環境變量或make參數傳遞。
說我有一個這樣的makefile:
VER ?=
step0:
echo "step0 should work"
step1:
echo "step1 should enforce variable"
ifeq($(VER), "")
$(error VER is not set)
endif
echo "Success: Value of Ver ${VER}"
step2:
echo "step2 should work"
我希望能夠運行以下測試用例:
VER="foo" make step1
# should result in printing the "Success:" line
要么
export VER=foo
make step1
# should result in printing the "Success:" line
要么
make step1 VER=foo
# should result in printing the "Success:" line
要么
make step1
# should result in printing "VER is not set"
但是,當我使用上述任何一個運行make step
時,我總是得到VER is not set
錯誤。
簡而言之,如何在特定的make目標中測試變量並在未設置錯誤消息的情況下進行響應? (但是其他make目標將不在乎是否設置了變量)
有兩件事:
首先,必須將Make命令和shell命令整齊地分開。 這個:
ifeq ($(A),$(B))
...
endif
是Make語法。 如果將ifeq (...)
傳遞給shell,可能會遇到麻煩。 makefile配方中的命令是要傳遞給shell的shell命令。 要在規則中間使用“使ifeq
條件”,請執行以下操作:
step1:
some command
ifeq ($(A),$(B))
another command
endif
yet another command
請注意, ifeq
和endif
之前沒有TAB; 這些不是要傳遞給外殼程序的命令,它們由Make使用。
第二,這個:
ifeq(...)
應該是這樣的:
ifeq (...)
空間很重要(至少在我的Make版本中)。
第三,這個:
ifeq ($(VER), "")
應該是這樣的:
ifeq ($(VER),)
除非您實際上打算讓變量包含字符串“””。
(您可能已經發現了最后一批自己的東西,孤立地與ifeq
一起玩;請始終孤立地測試新工具。)
完成這些更改后,makefile對我有用。 如果對您不起作用,請告訴我,我們會盡快解決。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.