不知道大家有沒有試圖在 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.
echo -e “Your Name is: " $yourname
然而, 肯定還是失敗啦! 因為, 因為第一行裡面的 yourname 是經過求值的, 所以第二行要用 $$yourname 來取值. 這樣就會對了!
read -p “key in your name: " yourname \
echo -e “Your Name is: " $$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, “接續太長的命令".
說真的, 真本書超讚. 不過我沒有心情去一頁一頁地看它, 所以暫時不會有它的讀書心得跟大家報告. 或許想到哪裡, 寫到哪裡吧.