1. 程式人生 > >makefile簡單編寫-生成可執行檔案

makefile簡單編寫-生成可執行檔案

makefile

要想把寫好的程式放到linux下編譯,必不可少的要使用到makefile檔案。makefile帶來的好處就是——“自動化編譯”,一旦寫好,只需要一個make命令,整個工程完全自動編譯,極大的提高了軟體開發的效率。下面講下makefile簡單的編寫例子。

1、 Makefile的規則

target  : prerequisites ...

          command

          ...

          ...
         -------------------------------------------------------------------------------

target:也就是一個目標檔案,可以是Object File,也可以是執行檔案。還可以是一個標籤(Label),對於標籤這種特性,在後續的“偽目標”章節中會有敘述。
prerequisites:就是,要生成那個target所需要的檔案或是目標。
command:也就是make需要執行的命令。(任意的Shell命令)

2、 簡單例子

2.1、一個執行檔案(自己本次使用的)

   objects = dhcpv4.o
   dhcpv4 : $(objects)
            gcc -o dhcpv4 $(objects)
   dhcpv4.o
: dhcpv4.c dhcpv4.h gcc -c dhcpv4.c clean : rm dhcpv4 $(objects)

dhcpv4 即為最終的target檔案,make編譯後,執行./dhcpv4執行程式。
clean 為清除命令,執行./clean將會清除可執行檔案dhcpv4,如果要繼續執行程式,需重新make生成dhcpv4。
註釋:

 Objects為定義的常量,非常類似於C語言中的巨集定義;
    $(objects)為prerequisites;
    gcc -o dhcpv4 $(objects)生成對應的.o
檔案; gcc -c dhcpv4.c生成對應的.c檔案。

2.2、倆個執行檔案

  # phony 目標可以有依賴關係。
   .PHONY : dhcpv6 dhcpv4             
   dhcpv4 : dhcpv4.o common.o
            gcc -o dhcpv4 dhcpv4.o common.o

   dhcpv4.o : dhcpv4.c dhcpv4.h common.h 
            gcc -c dhcpv4.c
   dhcpv6 : dhcpv6.o common.o
            gcc -o dhcpv6 dhcpv6.o common.o 
   dhcpv6.o : dhcpv6.c dhcpv6.h common.h 
            gcc -c dhcpv6.c
   common.o : common.c common.h 
            gcc -c common.c
   clean :
            rm dhcpv4 dhcpv6 dhcpv4.o common.o dhcpv6.o

dhcpv4與dhcpv6為最終的target檔案,make編譯後,可選擇執行不同命令(./dhcpv4或./dhcpv6),執行相對應的功能。

請注意,在 “gcc”命令之前必須要有一個tab縮排。語法規定Makefile中的任何命令之前都必須要有一個tab縮排,否則make就會報錯。

3、 參考資料

4、 附加

編譯時出現*** missing separator (did you mean TAB instead of 8 spaces?).  Stop.
makefile應該是:   
  program:make.o   
              <TAB>gcc make.o -o make   
  make.o:make.c   
              <TAB>gcc -c make.c
要在每個動作行之前必須加一個<tab>

最後歡迎大家關注我個人的微信公眾號——餘生請多快跑,主要是發自己嵌入式歷程沿路積攢的東西,歡迎一起探討。同時當也會發一些影視,動漫小說等資源。
公眾號二維碼