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