makefile 常用變數

  1. 常用的變數或符號
    符號 意義
    $? 代表需要重建(被修改)的相依性項目。
    $@ 目前的目標項目名稱。
    $< 代表目前的相依性項目。
    $* 代表目前的相依性項目,不過不含副檔名。
    - make 會忽略命令的錯誤。
    @ make 不會在標準輸出 stdout 顯示要執行的命令。
  2. 以下例子,目標項目 main 的相依性項目有 main.o 2.o 3.o,則法則中的 $< 代表目前的相依項目 main.o 2.o 3.o。
    main: main.o 2.o 3.o
    	gcc -o main $<
    
  3. makefile1 的目標項目 main,使用內建法則 (沒有指定法則),現在增加如下法則,其中 $@ 代表目前的目標項目 main。
    [dywang@dyw219 make1]$ vim makefile1 
    [dywang@dyw219 make1]$ grep ^main: -A1 makefile1
    main: $(OBJS)
    	$(CC) -o $@ $(OBJS)
    
  4. clean 目標項目刪除所有 .o 檔,當 .o 檔不存在時忽略錯誤。
    [dywang@dyw219 make1]$ vim makefile1 
    [dywang@dyw219 make1]$ grep ^clean: -A1 makefile1
    clean:
    	-rm -f $(OBJS)
    
  5. 判斷式 if 起始為符號 @,讓 make 在執行該法則時,停止印出標準輸出的文字。
    install: main
       @if [ -d $(INSTDIR) ]; \
        then \
          ...;\
       fi