Make
通過shell腳本邏輯或本機make邏輯在Makefile中設置變數,但在環境變數中找不到時分配預設值
我有類似下面的片段。如何通過 shell 腳本邏輯在 Makefile 中正確設置未定義的 ENV var?當腳本執行時已經在環境中定義了 ENV var 時,一切似乎都可以工作,但如果沒有,它不會將其設置為預設值(保持為空/未設置)。
我更願意做類似的事情
FROM_ENV_VAR=${FROM_ENV_VAR:-"default value"}
,但是 Makefile 語法是否有類似於從其他一些 ENV var(當然可以是相同的 var)設置變數的東西,否則會為其分配一個預設值。MAKE_VAR=fromake .PHONY: trial trial: if [ -z ${FROM_ENV_VAR} ]; then \ FROM_ENV_VAR="defaulting"; \ echo "setting VAR since not defined from ENV, val: ${FROM_ENV_VAR}"; \ echo "and make's VAR is ${MAKE_VAR}, from shell script"; \ else \ echo "using ENV VAR's defined value: ${FROM_ENV_VAR}"; \ echo "and make's VAR is ${MAKE_VAR}, from shell script"; \ fi echo "in make, make var is $(MAKE_VAR)" echo "in make, shell var is $(FROM_ENV_VAR)"
您可以使用條件變數賦值運算符
?=
,它只會設置尚未定義的變數。有關詳細資訊,請參閱手冊中此頁的底部。make
例如,使用以下 Makefile:
MYVAR?=Set by make .PHONY: all all: @echo ${MYVAR}
您會得到以下結果:
$ make Set by make $ MYVAR="Set on the command line" make Set on the command line