由于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中$>代表引用“:”后的内容,,,$@引用“:”前的内容
makefile编写差异的更多相关文章
-
Windows 下的 Makefile 编写
Windows 下的 Makefile 编写(一)Makefile的基本规则 作者:cntrump Makefile对于很多人来说是陌生的,特别是习惯于使用 IDE 的人来说,似乎没有听说过 Make ...
-
Yocto开发笔记之《Makefile编写》(QQ交流群:519230208)
开了一个交流群,欢迎爱好者和开发者一起交流,转载请注明出处. QQ群:519230208,为避免广告骚扰,申请时请注明 “开发者” 字样 =============================== ...
-
Make和Makefile编写(详见GCC手册)
Makefile和Make Rules 多模块软件.依赖树和Make 默认规则 Make使用程序对简单变量的支持 内建变量 虚目标 特殊目标 一般性语法错误及其纠正措施 命令行的使用和调试 Makef ...
-
linux 下C语言编程库文件处理与Makefile编写
做开发快3年了,在linux下编译安装软件算是家常便饭了.就拿gcc来说,都有不下10次了,可基本每次都会碰到些奇奇怪怪的问题.看来还是像vs.codeblocks这样的ide把人弄蠢了.便下定决心一 ...
-
单目录下多文件 makefile编写
makefile很久就接触过了,但是一直没怎么深入的去学习和总结:在项目中我也只是看看makefile或者修改部分语句,全部自己动手写的话还真没有:知识在于沉淀,这句说的非常好,所以现在把自己理解的东 ...
-
linux -->; Makefile编写
Makefile编写 单目录 测试程序在同一个文件中,共有func.h.func.c.main.c三个文件,Makefile写法如下所示: CC = gcc CFLAGS = -g -Wall mai ...
-
Linux——makefile编写
以前对makefile的编写,限于刚开始接触,我都比较局限一些死板的格式,有时候就会显得有些繁琐.在进一步了解一些系统编译和链接的知识后,对makefile编写流程有了一些新的认识,所以来此梳理梳理, ...
-
如何将多个C文件链接在一起----Makefile编写及make指令
需使用GCC编译器,关于MinGW的安装指南:https://people.eng.unimelb.edu.au/ammoffat/teaching/20005/Install-MinGW.pdf 单 ...
-
[动态库]动态库生成和使用以及Makefile编写
转自:https://www.cnblogs.com/ljtknowns/p/5647793.html 文件目录结构如下 1 dynamiclibapp.c 2 Makefile 3 comm/inc ...
随机推荐
-
从零开始学iPhone开发(1)——工具的使用
前提:已经具备了苹果电脑或者iMac,或者安装好了x86苹果而且已经联网. 苹果系统版本要求是:Max OS X Lion,或者 Mountain Lion 我们对iPhone进行使用的工具是XCod ...
-
oracle的数据库,随笔
不多说,看代码 select b.*,a.kscj,a.paiming from (select t.kch,t.kcm,t.kscj,t.xh, rank() over (order ...
-
C++静态成员函数访问非静态成员的几种方法
大家都知道C++中类的成员函数默认都提供了this指针,在非静态成员函数中当你调用函数的时候,编译器都会“自动”帮你把这个this指针加到函数形参里去.当然在C++灵活性下面,类还具备了静态成员和静态 ...
-
动态规划——Russian Doll Envelopes
这个题大意很好理解,通过例子就能明白,很像俄罗斯套娃,大的娃娃套小的娃娃.这个题是大信封套小信封,每个信封都有长和宽,如果A信封的长和宽都要比B信封的要大,那么A信封可以套B信封,现在给定一组信封的大 ...
-
Dubbo常用配置解析
一.多版本的支持 如何发布服务,需要将需要暴露的服务接口发布出去供客户端调用,需要在java同级目录新建一个resources目录,然后将resoureces目录标记成Test Resoureces ...
-
URL地址编码和解码
0. 参考 [整理]关于http(GET或POST)请求中的url地址的编码(encode)和解码(decode) python3中的urlopen对于中文url是如何处理的? 中文URL的编码问题 ...
-
hdu 1895 Sum Zero hash
Sum Zero Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others) Proble ...
-
express + mongodb 搭建一个简易网站 (五)
前面已经将导航中的“所有宝贝”页面连上了mongodb,现在我们就把其他的页面脸上数据库,将整个网站全部实现. 打开routes文件,找到jacket.js,将里面的代码修改如下: var expre ...
-
git(常用命令)思维导图...
Git 是一个很强大的分布式版本控制系统.它不但适用于管理大型开源软件的源代码,管理私人的文档和源代码也有很多优势. 来自文章:http://www.cnblogs.com/1-2-3/archive ...
-
ls 大全
ls命令是linux下最常用的命令.ls命令就是list的缩写缺省下ls用来打印出当前目录的清单如果ls指定其他目录那么就会显示指定目录里的文件及文件夹清单. 通过ls 命令不仅可以查看linu ...