C - Makefile



make 命令


make -p // 列出內建的預設規則
make -n // 印出讀入Makefile後會執行的命令(僅顯示,並不會執行)



gcc 命令


gcc -MM // 生成一張依賴關係表



基本用法


目標檔名: 關聯檔名 關聯檔名

只要"關聯檔名"有任何一個變動,"目標檔名"就會重新建立

內建標籤


.PHONY: // 指定該項目為假項目
.SUFFIXES: // 自定義副檔名

如: (定義為假項目,預設就不會執行了。要指定才會呼叫,比如 make clean)

.PHONY: clean
clean:
-rm *.o

如:(把 .c 指定成跟 .o 一樣的執行動作)

.SUFFIXES: .o .c
.c.o:
$(CC) $(CFLAGS) -c $<


內建變數


$@ // 庫名,如xxx.a xxx.o。當前目標的全路徑名。可用於用戶定義的目標名的相關行中(:左邊)
$* // 不含副檔名的名稱(:左邊)
$< // 比目標文件時間更新的依賴文件名(第一個:右邊的)
$: // 無
$? // 比目標文件時間更新的依賴文件名(:右邊)
$^ // 所有必要條件的檔名(:右邊)

% // 萬用字元
# // 註解
\ // 連接符號


CC CFLAGS
CXX CXXFLAGS
RANLIB
NM
AR ARFLAGS
AS ASFLAGS
RM RMFLAGS



變數給值


:= // 立即指定
?= // 不存在就指定
+= // 附加
= // 使用時再指定



clean 相關


- // 忽略命令結果 (有錯誤產生也不停止)



install 相關


@ // 在執行時不顯示命令
&& // 當前面的命令成功時,才能執行後面的命令,用法同 shell
() // 括號能確保所有處理都是由同一個shell完成的,如 "(cd dir; make)"



CFLAGS 參數


-lc // 使用標準庫
-lpthread // 使用 pthread
-lm // 使用數學庫







沒有留言:

張貼留言