makefile編寫差異

由於zlib動態庫在linux下引用的問題引出了對於簡練的makefile的學習。之前通過看網絡上的一些文章自己也算簡單瞭解如何編寫一個makefile,可總是不那麼美觀,今天經過輝哥的指點,對於makefile做了調整,看下兩者之間的差別吧。如果有更好的方法,歡迎指點。

 

第一次文件如下:

CPP=filehead.cpp xmailuncompress.cpp zlibstrage.cpp compressfactory.cpp md5.cpp
OBJ =  md5.o compressfactory.o filehead.o xmailuncompress.o zlibstrage.o

.PHONY:ALL
ALL: libcompress.a libcompress.so  onlyUncompress mytest

HEAD =  -I./include/

mytest: main.cpp
    g++ main.cpp -g -L. -lcompress   -L./so/ -llogger ${HEAD} -I. -o $@
    rm -f *.o   
    
onlyUncompress:unCompress.cpp
    g++ unCompress.cpp -g -L. -lcompress  -L./so/ -llogger ${HEAD} -I. -o $@

libcompress.a:$(OBJ)
    ar -rc libcompress.a $(OBJ) 
    
libcompress.so:$(CPP)
    g++ -g -fPIC -shared -Wl,-rpath ./so/ -L./so -lz -llogger ${CPP} -o $@  ${HEAD}
    cp libcompress.so ./so/

compressfactory.o:compressfactory.cpp
    g++ -c compressfactory.cpp ${HEAD}

filehead.o:filehead.cpp
    g++  -c filehead.cpp ${HEAD}

xmailuncompress.o:xmailuncompress.cpp
    g++  -c xmailuncompress.cpp ${HEAD}

zlibstrage.o:zlibstrage.cpp
    g++  -c zlibstrage.cpp -L./so -lz ${HEAD}
md5.o:md5.cpp
    g++  -c md5.cpp ${HEAD}

install:
    cp libcompress.so ../libcomp/so/
    cp ./so/*.so ../libcomp/so/
    cp *.h       ../libcomp/include/
    cp ./include/* ../libcomp/include/
    
    cp *.h       ../dfs_api/include/compress/
    cp libcompress.so ../dfs_api/lib/

clean:
    rm -f *.o
    rm -f libcompress.a
    rm -f mytest
    rm -f onlyUncompress
    rm -f libcompress.so

 

經過修改後的makefile如下:

 

CPP=main.cpp filehead.cpp xmailuncompress.cpp zlibstrage.cpp compressfactory.cpp md5.cpp

FLAG= -c -g -fPIC -shared

OBJ=filehead.o xmailuncompress.o zlibstrage.o compressfactory.o md5.o

.PHONY:ALL
all:libcompress.a libcompress.so  onlyUncompress mytest

HEAD= -I./include/ -I.

LIB= -L./ -llogger -lz

mytest: main.o
    g++ $< -g -L. -lcompress  ${LIB}  ${HEAD} -I. -o $@
    rm -f *.o   
    
onlyUncompress:unCompress.cpp
    g++ unCompress.cpp -g -L. -lcompress  ${LIB} ${HEAD} -I. -o $@

libcompress.a:$(OBJ)
    ar -rc libcompress.a $(OBJ) 
    
libcompress.so:$(OBJ)
    g++ -g -fPIC -shared -Wl,-rpath ${LIB} $(OBJ) -o $@  ${HEAD}

.cpp.o:
    g++ $(HEAD) $(FLAG) -o $@ $< 

install:
    cp libcompress.so ../libcomp/so/
    cp *.so ../libcomp/so/
    cp *.h       ../libcomp/include/
    cp ./include/* ../libcomp/include/
    
    cp *.h       ../dfs_api/include/compress/
    cp libcompress.so ../dfs_api/lib/

clean:
    rm -f *.o
    rm -f libcompress.a
    rm -f mytest
    rm -f onlyUncompress
    rm -f libcompress.so

 

兩者對比來看是不是後者清晰簡練不少微笑

順帶的瞭解了兩個小的知識點:

在makefile中$>代表引用“:”後的內容,,,$@引用“:”前的內容

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章