1. 程式人生 > 實用技巧 >Makefile 待完善

Makefile 待完善

Makefile檔案

  在編譯程式的時候,通常需要用到多個檔案,當工程很大時,編譯一個一個程式太過浪費時間。當使用Makefile檔案的只需要執行make命令便可以將整個工程一次性編譯下來,

還可以根據自己的需求編譯出需要的檔案,這些都可以通過編寫Makefile檔案實現。

##########定義變數##############################
#CC=arm-linux-gcc #可修改成自己需要的編譯器,不設定則是預設的編譯器 TAG=./BIN/main #定義目標檔案的目錄 SRC=$(wildcard ./SRC/*.c) #將./SRC目錄下的所有.c檔案作為SRC變數的列表 OBJ=$(SRC:%.c=%.o) #將./SRC變數列表的.c改成.o
objs = xx.0 xx/xx.o #這裡需要注意.o檔案的連結順序,不然會有未定義與重定義的錯誤出現 override CONFIG += -I./INC #用於新增標頭檔案目錄或者是庫檔案目錄,需要新增別的選項可以make CONFIG="-L",CONFIG便會臨時加上這一選項
                 #注意override和+號必不可少 ###############################################
##變數的引用使用$()
#目標 依賴 $(TAG):$(SRC) $(CC) $^ -o $@ $(CONFIG) #$^:表示全部依賴檔案 $@:表示目標檔案

$(SRC):$(OBJ)
  $(CC) $^ -o $@ -c $(objs) #生成.o檔案

#目標 clean: $(RM) $(OBJ) $(TAG) #強調不要引用任何隱式規則,就是當工作路徑有一個檔案叫clean時,make clean不會與其發生衝突 .PHONE:clean

注意:

1.以上程式碼是Makefile編譯程式的一般程式碼,Makefile太過龐大,系統學習下來要花不少時間,目前只需要用到什麼用什麼就可以了;

2.當執行命令make時,不新增目標則第一個將成為這當個Makefile的最終目標;

3.如果目標已經存在,則需要比較目標和依賴的時間關係,如果依賴不存,則不需要比較會導致不執行。如果依賴存在則比較目標新則需要更新,反之則不需要更新。

4.在makefile的眼中,所有的檔案都有是一層一層遞推的目標-依賴關係,然後通過對比目標和依賴的更新時間來決定下一步動作。當目標無法生成時,會通過依賴層層遞推,

然後層層返回,生成最終的目標。

目前Makefile學到了這裡,在系統移植的時候會大量接觸,到時候再新增。