Makefile 內建法則

  1. make 內建的法則是借助檔尾(suffix)得知使用的法則。檔尾和符號 (pattern) 法則有下列兩項表示法,將 .old_suffix 的檔案變成 .new_suffix 的檔案。
    .<old_suffix>.<new_suffix>:
    
    %.<new_suffix>: %.<old_suffix>
    
  2. 可以利用 -p 選項,要求 make 印出內建法則,過濾第一種法則 .c.o: 將 .c 檔變成 .o 檔。
    [dywang@dyw219 make1]$ make -p | sed -r '/^(#|$)/d' | grep -A1 "^.c.o:$"
    .c.o:
    	$(COMPILE.c) $(OUTPUT_OPTION) $<
    
  3. 過濾第二種法則 %.o: %.c 將 .c 檔變成 .o 檔。
    [dywang@dyw219 make1]$ make -p | sed -r '/^(#|$)/d' | grep -A1 "^%.o: %.c$"
    %.o: %.c
    	gcc -Wall -c $<
    
  4. 刪除 main main.o 2.o 3.o 後再執行 make,顯示 cc -c ...,以 cc 編譯,表示內建法則一生效。
    [dywang@dyw219 make1]$ rm -f main main.o 2.o 3.o
    [dywang@dyw219 make1]$ make
    cc    -c -o main.o main.c
    cc    -c -o 2.o 2.c
    cc    -c -o 3.o 3.c
    cc   main.o 2.o 3.o   -o main
    
  5. 再清除 main 執行檔及所有 .o 檔。
    [dywang@dywIssd make1]$ make clean
    rm -f main main.o 2.o 3.o
    
  6. 若不使用內建法則,可以於 make 時,直接加入參數
    [dywang@dywIssd make1]$ make CC=gcc CFLAGS="-Wall -g" main
    gcc -Wall -g   -c -o main.o main.c
    gcc -Wall -g   -c -o 2.o 2.c
    gcc -Wall -g   -c -o 3.o 3.c
    gcc -o main main.o 2.o 3.o