makefile 變數實例二

  1. 加入 install 目標項目,將完成的應用程式安裝到指定的目錄,判斷式 if 起始為符號 @,讓 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
    
  2. 在此例中 ; 分號連續執行,也可以換成 && 前個命令成功,才執行下個命令
    [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
    
  3. 執行 clean 目標項目
    [dywang@dyw219 make1]$ make -f makefile2 clean
    rm -f main.o 2.o 3.o
    
  4. 執行 main 目標項目
    [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
    
  5. 執行 install 目標項目
    [dywang@dyw219 make1]$ make -f makefile2 install
    Installed in /home/dywang/bin
    [dywang@dyw219 make1]$ ll /home/dywang/bin/ma
    mac_desktop.sh  main
    
  6. 查看安裝的檔案 main
    [dywang@dyw219 make1]$ ll /home/dywang/bin/main
    -rwxr-xr-x. 1 dywang dywang 7036 Apr 27 18:35 /home/dywang/bin/main