程式的編譯鏈結makefile寫法

2021-06-17 01:03:41 字數 904 閱讀 7199

編譯器: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檔...