Make

通過shell腳本邏輯或本機make邏輯在Makefile中設置變數,但在環境變數中找不到時分配預設值

  • March 27, 2020

我有類似下面的片段。如何通過 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

引用自:https://unix.stackexchange.com/questions/575412