由于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编写差异的更多相关文章

  1. Windows 下的 Makefile 编写

    Windows 下的 Makefile 编写(一)Makefile的基本规则 作者:cntrump Makefile对于很多人来说是陌生的,特别是习惯于使用 IDE 的人来说,似乎没有听说过 Make ...

  2. Yocto开发笔记之《Makefile编写》(QQ交流群:519230208)

    开了一个交流群,欢迎爱好者和开发者一起交流,转载请注明出处. QQ群:519230208,为避免广告骚扰,申请时请注明 “开发者” 字样 =============================== ...

  3. Make和Makefile编写(详见GCC手册)

    Makefile和Make Rules 多模块软件.依赖树和Make 默认规则 Make使用程序对简单变量的支持 内建变量 虚目标 特殊目标 一般性语法错误及其纠正措施 命令行的使用和调试 Makef ...

  4. linux 下C语言编程库文件处理与Makefile编写

    做开发快3年了,在linux下编译安装软件算是家常便饭了.就拿gcc来说,都有不下10次了,可基本每次都会碰到些奇奇怪怪的问题.看来还是像vs.codeblocks这样的ide把人弄蠢了.便下定决心一 ...

  5. 单目录下多文件 makefile编写

    makefile很久就接触过了,但是一直没怎么深入的去学习和总结:在项目中我也只是看看makefile或者修改部分语句,全部自己动手写的话还真没有:知识在于沉淀,这句说的非常好,所以现在把自己理解的东 ...

  6. linux --> Makefile编写

    Makefile编写 单目录 测试程序在同一个文件中,共有func.h.func.c.main.c三个文件,Makefile写法如下所示: CC = gcc CFLAGS = -g -Wall mai ...

  7. Linux——makefile编写

    以前对makefile的编写,限于刚开始接触,我都比较局限一些死板的格式,有时候就会显得有些繁琐.在进一步了解一些系统编译和链接的知识后,对makefile编写流程有了一些新的认识,所以来此梳理梳理, ...

  8. 如何将多个C文件链接在一起----Makefile编写及make指令

    需使用GCC编译器,关于MinGW的安装指南:https://people.eng.unimelb.edu.au/ammoffat/teaching/20005/Install-MinGW.pdf 单 ...

  9. [动态库]动态库生成和使用以及Makefile编写

    转自:https://www.cnblogs.com/ljtknowns/p/5647793.html 文件目录结构如下 1 dynamiclibapp.c 2 Makefile 3 comm/inc ...

随机推荐

  1. Div+Css(一)必备知识

    我只积累我不知道的 参考链接 http://www.kwstu.com/ArticleView/divcss_201442291125960 http://www.kwstu.com/ArticleV ...

  2. SQL Server dbcc shrinkfile 不起作用

    方法 1.重建聚集索引. 方法 2.重建堆表. ---------------------------------------------------------------------------- ...

  3. SQL Server 无法启动的 4 种原因

    SQL Server 无法启动的原因定位.首先要知道SQL Server 启动的过程. 第一步: 读取注册表,创建log文件.检测硬件.初始化系统配置. 第二步: 启动系统数据库. 第三步: 准备好网 ...

  4. Arduino红外遥控系列教程2013——发射与接收

    教程一:红外接收教程本教程共四步操作,将教大家如何收集电视红外遥控器的编码 视频链接:http://v.youku.com/v_show/id_XNTE2NjQ5NTcy.html 第一步:电路连接, ...

  5. MFC 操作控件数据

    在MFC中有多种获取控件数据的方法 1.GetWindowText()和SetWindowText()函数   ],ch2[],ch3[]; GetDlgItem(IDC_EDIT1)->Get ...

  6. C# 弗洛伊德(Floyd)算法

    弗洛伊德(Floyd)算法 主要是用于计算图中所有顶点对之间的最短距离长度的算法,如果是要求某一个特定点到图中所有顶点之间的最短距离可以用;        ;    ;    ;            ...

  7. 【Xamarin挖墙脚系列:Xamarin正式发布了IOS的模拟器在Windows下】

    xamarin 的发展越来越迅速.如果还感觉这玩意儿是个鸡肋,辣么请跟的上时代吧 . (额,对微软产品有严重偏见的请绕行..............其实你可以看看.net 基金会现有的开源项目再说不开 ...

  8. 在cocos2d-x界面中嵌入Android的WebView

    在Cocos2dxActivity.java中, (1) 增加函数onCreateLayout, [java]  view plain copy   public LinearLayout onCre ...

  9. 100个linux常用命令

    1,echo “aa” > test.txt 和 echo “bb” >> test.txt //>将原文件清空,并且内容写入到文件中,>>将内容放到文件的尾部 2 ...

  10. Eclipse Velocity插件安装

    打开eclipse安装velocity插件,这里有两种eclipse velocity的安装 方式一:不推荐的安装(安装会失败) Help>install new software>add ...