Shell Script in Makefile

不知道大家有沒有試圖在 Makefile 裡面寫個 shell script 呢?

打個比方來說, 如果這是一個 script

read -p “key in your name: " yourname

echo -e “Your Name is: " $yourname

隨便貼到一個 shell.sh, 然後執行, 保證很順利.

不過呢, 把這兩行貼到 makefile 之後就變樣了.

首先, 第二行不認識第一行的 yourname 了….

Why? 要 export 嗎?

不是!

因為 makefile 裡面的指令, 每一行是單獨在一個 sh 裡面執行的, 所以第二行當然不認識第一行的 yourname 囉!

解決之道是, 加上一個 ‘\’, 表示這兩行希望用同一個 shell.

read -p “key in your name: " yourname    \

echo -e “Your Name is: " $yourname

 

然而, 肯定還是失敗啦! 因為, 因為第一行裡面的 yourname 是經過求值的, 所以第二行要用 $$yourname 來取值. 這樣就會對了!

read -p “key in your name: " yourname    \

echo -e “Your Name is: " $$yourname

對了, 還要分號. 因為分號可以讓這行指令告一段落.

 

read -p “key in your name: " yourname ;   \ 

echo -e “Your Name is: " $$yourname;

如果有 do 迴圈, 分號的位置如下:

for d in logic ui; \

do \

  echo $$d/*.java; \

done > $@

這個簡單的撇步不懂的話, makefile 就會寫不好. 詳情請參閱 O’Relly 出版社的 “GNU Make 專案開發工具" 第三版的 page 100, “接續太長的命令".

說真的, 真本書超讚. 不過我沒有心情去一頁一頁地看它, 所以暫時不會有它的讀書心得跟大家報告. 或許想到哪裡, 寫到哪裡吧.