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中$>代表引用“:”后的内容,,,$@引用“:”前的内容

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