欢迎来到天天文库
浏览记录
ID:40665342
大小:41.50 KB
页数:5页
时间:2019-08-05
《1[1].2.makefile使用.Linux下编译与调试》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1、LINUX下编译与调试-makefile使用【ITjob课程资料】makefile基本过程处理makefile的工作过程为:先将需要编译连接的c/c++源文件组织到文件makefile中,接着运行make程序,make程序读取当前文件夹下面的makefile文件信息,并根据makefile里面的组织信息,调用相应的gcc/g++/shell等程序,完成对源文件的批量编译和连接。要写makefile文件,首页必须清楚目标文件和依赖文件的概念。通常情况下,目标文件和依赖文件都是指实际的文件。例如,有makefile文件(注意文件
2、名称就是makefile),内容如下:main.exe:main.ofunc.og++-omain.exemain.ofunc.omain.o:main.cppg++-cmain.cppfunc.o:func.cppg++-cfunc.cpp下面我们分析一下这段代码:文件第一行中的文件main.exe称为目标文件(入口),冒号后面以空格分隔的两个文件称为main.exe的依赖文件。意思是文件main.exe的产生依赖于文件main.o和func.o同样道理:第3行的main.o为目标文件(入口),main.cpp为main.
3、o的依赖文件第5行的func.o为目标文件(入口),func.cpp为func.o的依赖文件.文件第2行(以tab开头)表示要产生第1行的目标文件需要执行的命令。对于该makefile文件,程序make处理过程如下:下面我们把所有的*.o和*.exe全部删除。执行:#:make则系统会自动生成main.exe,main.o,func.o它们的执行原理如下:make程序首先找到第一个main.exe入口,找到它的两个依赖文件main.o和func.o;通过main.o,找到main.o的入口,发现没有main.o文件,则执行下
4、面g++-cmain.cpp同样,找到func.o的入口,发现没有func.o文件,则执行下面的g++-cfunc.cpp然后判断main.exe文件存在不存在,如果不存在,则执行g++-omain.exemain.ofunc.o。下面我们更改一下func.cpp文件,则处理过程如下:make程序首先找到第一个main.exe入口,判断它的两个依赖文件main.o和func.o;通过main.o,找到main.o的入口,发现存在main.o文件,则比较main.o的时间与main.cpp,如果发现main.o比main.cp
5、p旧,则执行下面g++-cmain.cpp同样,找到func.o的入口,发现存在func.o文件,则比较func.o的时间与func.cpp,如果发现func.o比func.cpp旧,则执行下面的g++-cfunc.cpp然后判断main.exe,如果main.exe文件存在,则判断main.exe文件的时间,如果比main.o和func.o中的任何一个旧,则执行g++-omain.exemain.ofunc.o。rebuild的制作main.exe:main.ofunc.og++-omain.exemain.ofunc.o
6、main.o:main.cppg++-cmain.cppfunc.o:func.cppg++-cfunc.cpprebuild:cleanmain.execlean:rm*.o*.exe执行makeclean将清除掉文件夹中的二进制可执行文件执行makerebuild则先执行清除,再重新编译连接。注意:执行完makeclean之后再次执行makerebuild会出错,除非再次执行make,或者makemain.exe。带头文件的makefile增加头文件func.hintMyFunc();main.cpp修改为:#inclu
7、de#include"func.h"intmain(){#ifdef_DEBUGprintf("DebugMyFuncis:%d",MyFunc());#elseprintf("NDEBUGMyFuncis:%d",MyFunc());#endifreturn0;}func.cpp修改为:#include"func.h"intMyFunc(){return123;}则makefile多了头文件的文件依赖,makefile文件如下:main.exe:main.ofunc.og++-omain.exe*
8、.omain.o:main.cppfunc.hg++-cmain.cppfunc.o:func.cppfunc.hg++-cfunc.cpprebuild:cleanmain.execlean:rm*.o*.exe命名不同的makefile文件如果makefile不是默认的名称,则使用命令
此文档下载收益归作者所有