Shell-Script

makefile執行時如何從命令行獲取變數?

  • July 22, 2018

如在 bash 腳本中:讀取 -p “Only UI(y/n)” Temp_Answer。是否可以在 Makefile 執行時執行此操作?因為我想根據 Makefile 中的 $Temp_Answer(Y 或 N)做不同的基礎。

訪問 shell 變數

所有導出的 shell 環境變數都可以像這樣訪問:

$(MYBASEDIR)

例子

說我有這個Makefile

$ cat Makefile 
all:
   @echo $(FOO)

現在沒有變數集,大驚喜,我們什麼也得不到:

$ printenv | grep FOO
$

$ make 

$

使用剛剛設置但未導出的變數:

$ FOO=bar
$ printenv |grep FOO
FOO=bar

$ export -p | grep FOO
$

$ make 

$

現在使用導出的變數:

$ export FOO
$ export -p | grep FOO
declare -x FOO="bar"

$ make 
bar

讀取使用者輸入

當然,您可以在 Makefile 中讀取使用者的輸入。這是一個例子。

all:

   @echo "Text from env. var.: $(FOO)"
   @echo ""

   @while [ -z "$$CONTINUE" ]; do \
       read -r -p "Type anything but Y or y to exit. [y/N]: " CONTINUE; \
   done ; \
   [ $$CONTINUE = "y" ] || [ $$CONTINUE = "Y" ] || (echo "Exiting."; exit 1;)
   @echo "..do more.."

有了這個,您現在可以繼續或停止Makefile

例子

按下y將繼續:

$ make
Text from env. var.: bar

Type anything but Y or y to exit. [y/N]: y
..do more..
$

按下其他任何東西n都會停止它:

$ make
Text from env. var.: bar

Type anything but Y or y to exit. [y/N]: n
Exiting.
make: *** [all] Error 1

參考

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