1. 程式人生 > >Linux下用Makefile製作動態庫和靜態庫並編譯生成可執行程式

Linux下用Makefile製作動態庫和靜態庫並編譯生成可執行程式

Makefile
一個工程中的原始檔不計其數,其按型別、功能、模組分別放在若干個目錄中,makefile定義了一系列的規則來指定,哪些檔案需要先編譯,哪些檔案需要後編譯,哪些檔案需要重新編譯,甚至於進行更復雜的功能操作,因為 makefile就像一個Shell指令碼一樣,其中也可以執行作業系統的命令。在 Linux(unix )環境下使用GNU 的make工具能夠比較容易的構建一個屬於你自己的工程,整個工程的編譯只需要一個命令就可以完成編譯、連線以至於最後的執行。 所要完成的Makefile 檔案描述了整個工程的編譯、連線等規則。

Makefile例項與使用
[[email protected]

link]$ vim makefile
makefile中程式碼:

APPNAME=link
LIB_SRCS=linker.c
LIB_NAME=linker
LIB_PATH=.libs

CFLAGS+=-I${LIB_PATH}
LDFLAGS+=-L${LIB_PATH} -l${LIB_NAME}

all: clean static_lib shared_lib install
    gcc ${CFLAGS} main.c -o ${APPNAME}_static ${LDFLAGS} -static
    gcc ${CFLAGS} main.c -o ${APPNAME}
_shared ${LDFLAGS} rm -f *.o static_lib: linker.c gcc -c ${LIB_SRCS} ar -rcs lib${LIB_NAME}.a *.o rm -f *.o shared_lib: gcc -fPIC -shared ${LIB_SRCS} -o lib${LIB_NAME}.so clean: rm -rf *.o distclean: rm -rf .libs rm -rf ${APPNAME}_* install: mkdir -p ${LIB_PATH}
mv lib${LIB_NAME}.* ${LIB_PATH} cp linker.h ${LIB_PATH}

這裡寫圖片描述

[[email protected] linker]$ make
找makefile執行總的目標 為all 有依賴的情況下先執行依賴的內容再執行總的目標裡面的內容。

[[email protected] linker]$ make clean
執行makefile檔案中的clean目標