Linux下用Makefile製作動態庫和靜態庫並編譯生成可執行程式
阿新 • • 發佈:2019-01-10
Makefile
一個工程中的原始檔不計其數,其按型別、功能、模組分別放在若干個目錄中,makefile定義了一系列的規則來指定,哪些檔案需要先編譯,哪些檔案需要後編譯,哪些檔案需要重新編譯,甚至於進行更復雜的功能操作,因為 makefile就像一個Shell指令碼一樣,其中也可以執行作業系統的命令。在 Linux(unix )環境下使用GNU 的make工具能夠比較容易的構建一個屬於你自己的工程,整個工程的編譯只需要一個命令就可以完成編譯、連線以至於最後的執行。 所要完成的Makefile 檔案描述了整個工程的編譯、連線等規則。
Makefile例項與使用
[[email protected]
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目標