@
,讓 make 在執行該法則時,停止印出標準輸出的文字。因為 makefile 中每一行命令都會啟動一個新的 shell,為了讓判斷式中所有命令都在同一個 shell 執行,必須加上反斜線 \
,讓所有 script 命令在同一行。
[dywang@dyw219 make1]$ cp makefile1 makefile2 [dywang@dyw219 make1]$ vim makefile2 [dywang@dyw219 make1]$ grep ^install: -A10 makefile2 install: main @if [ -d $(INSTDIR) ]; \ then \ cp main $(INSTDIR);\ chmod a+x $(INSTDIR)/main;\ chmod og-w $(INSTDIR)/main;\ echo "Installed in $(INSTDIR)";\ else \ echo "Sorry, $(INSTDIR) does not exist";\ fi [dywang@dyw219 make1]$ grep ^INSTDIR makefile2 INSTDIR = /home/dywang/bin
;
分號連續執行,也可以換成 &&
前個命令成功,才執行下個命令
[dywang@dyw219 make1]$ grep ^install: -A10 makefile2 install: main @if [ -d $(INSTDIR) ]; \ then \ cp main $(INSTDIR) &&\ chmod a+x $(INSTDIR)/main &&\ chmod og-w $(INSTDIR)/main &&\ echo "Installed in $(INSTDIR)";\ else \ echo "Sorry, $(INSTDIR) does not exist";\ fi
[dywang@dyw219 make1]$ make -f makefile2 clean rm -f main.o 2.o 3.o
[dywang@dyw219 make1]$ make -f makefile2 main gcc -Wall -c main.c gcc -Wall -c 2.c gcc -Wall -c 3.c gcc -o main main.o 2.o 3.o
[dywang@dyw219 make1]$ make -f makefile2 install Installed in /home/dywang/bin [dywang@dyw219 make1]$ ll /home/dywang/bin/ma mac_desktop.sh main
[dywang@dyw219 make1]$ ll /home/dywang/bin/main -rwxr-xr-x. 1 dywang dywang 7036 Apr 27 18:35 /home/dywang/bin/main