編譯器:gcc
編譯環境:linux
資料夾:inc---存放標頭檔案.h,src---存放原檔案.c,lib---存放靜態檔案.a,obj---存放目標檔案.o 在當前目錄path下,主函式為main.c
通俗來講就是先將原檔案編譯成目標檔案,再將目標檔案鏈結生成可執行程式,linux中是.out形式,如windows的.exe檔案一樣
具體makefile編寫如下:使用隱含規則 $@ ,$<, $^
1,生成目標檔案*.o
cc = gcc
cflags =-g -i $(path) / inc
$(path) /obj/ %.o : $(path) /src/ %.c
$(cc) $(cflags) -c -o $@ $<
生成的目標檔案.o在obj資料夾下
2,生成靜態檔案*.a 和動態檔案*.so
target = $(path) / lib /*.a 如libtest.a
all : $(target)
$(target) : $(path)/obj / *.o
$(ar) $@ $^
生成的靜態檔案.a在lib資料夾下
target = $(path)/lib/*.so
all : $(target)
$(target) : $(path)/obj/*.o
$(cc) -fpic -shared -o libtest.so
3,鏈結成可執行檔案*.out
exefile = $(path) / *.out
all: $(exefile)
$(exefile):
$(cc) -o main main.c -l$(path)/lib -ltest
即可生成可執行檔案main.out
Makefile詳解 程式的編譯和鏈結
在此,我想多說關於程式編譯的一些規範和方法,一般來說,無論是c c 還是pas,首先要把原始檔編譯成中間 檔案,在windows下也就是 obj 檔案,unix下是 o 檔案,即 object file,這個動作叫做編譯 compile 然後再把大量的object file合成執行檔案,這個動作叫作...
程式的編譯 鏈結
在linux下,使用gcc來編譯hello world時,只使用最簡單的命令 gcc hello.c a.out hello world 但上述過程可以分解為4個步驟,即預處理 編譯 彙編 鏈結。預處理 預編譯 gcc e hello.c o hello.i 或者 cpp hello.c hello...
程式的編譯,鏈結
我們基本都知道乙個程式由 行再到最後被執行生成目標檔案,會經歷四個過程 1 預編譯 prepressing 2.編譯 compilation 3.彙編 linking 4.鏈結 assembly 但其中每個步驟都發生了什麼,還是不太清楚,今天我們就來學習了解下這個過程.一.預編譯.假設原檔案是.c檔...