makefile簡單編寫-生成可執行檔案
阿新 • • 發佈:2019-01-04
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>
最後歡迎大家關注我個人的微信公眾號——餘生請多快跑,主要是發自己嵌入式歷程沿路積攢的東西,歡迎一起探討。同時當也會發一些影視,動漫小說等資源。