欢迎来到天天文库
浏览记录
ID:45257752
大小:414.00 KB
页数:24页
时间:2019-11-11
《LINUX编译与调试》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、第一章LINUX下编译与调试学习目标gcc/g++编译器1使用makefile2gdb程序器34gcc/g++编译命令对于.c格式的C文件,可以采用gcc或g++编译对于.cc、.cpp格式的C++文件,应该采用g++进行编译常用的选项两种-c表示编译源文件-o表示输出目标文件-g在目标文件中产生调试信息,用于gdb调试-D<宏定义>编译时将宏定义传入进去-Wall选项可以打开所有类型的语法警告,以便帮助我们确定代码是正确的,并且尽可能实现可移植性。编译和连接的方式1、g++-cfunc.cpp
2、将编译func.cpp,并且生成同名的但扩展名为.o的二进制目标文件func.o同样道理g++-cmain.cpp将编译main.cpp,并且生成同名的但扩展名为.o的二进制目标文件main.o2、g++-cfunc.cpp-ofunc.o功能同(1)一样,但是显式地指定了输出文件名为main.o同样道理g++-cmain.cpp–omain.o编译main.cpp,并输出目标文件main.o3、(1)、(2)的基础上g++main.ofunc.og++-oa.outmain.ofunc.o
3、g++-oa.out*.o都将连接目标文件main.o和func.o最后形成可执行文件a.out对于第一种,如果没有显式指定可执行文件名,g++默认为a.out编译和连接的方式也可以将编译和链接的过程合为一块处理:g++*.cppg++func.cppmain.cppg++-oa.outfunc.cppmain.cpp都将先编译指定的源文件,如果成功的话,再链接成可执行文件a.out采用第4种方式,在其中第某个源文件中必须有main函数,否则链接通不过。如果希望在编译时传入宏定义,可使用-D参
4、数,例如g++-D_DEBUG*.cpp什么是makefilemakefile的工作过程为:先将需要编译连接的c/c++源文件组织到文件makefile中,接着运行make程序,make程序读取当前文件夹下面的makefile文件信息,并根据makefile里面的组织信息,调用相应的gcc/g++/shell等程序,完成对源文件的批量编译和连接。要写makefile文件,首页必须清楚目标文件和依赖文件的概念。通常情况下,目标文件和依赖文件都是指实际的文件。例如,有makefile文件,内容如下:
5、main.exe:main.ofunc.og++-omain.exemain.ofunc.omain.o:main.cppg++-cmain.cppfunc.o:func.cppg++-cfunc.cppMakefile文件的依赖关系文件第一行中的文件main.exe称为目标文件,冒号后面以空格分隔的两个文件称为main.exe的依赖文件。意思是文件main.exe的产生依赖于文件main.o和func.o同样道理:第3行的main.o为目标文件,main.cpp为main.o的依赖文件。第5行
6、的func.o为目标文件,func.cpp为func.o的依赖文件.第2行(以tab开头)表示要产生第1行的目标文件需要执行的命令。make程序的处理过程make程序首先读到第1行的目标文件main.exe和它的两个依赖文件main.o和func.o;然后比较文件main.exe和main.o/func.o的产生时间,如果main.exe比main.o/func.o旧的话,则执行第2条命令,以产生目标文件main.exe。在执行第2行的命令前,它首先会查看makefile中的其他定义,看有没有以
7、第1行main.o和func.o为目标文件的依赖文件,如果有的话,继续按照(1)、(2)的方式匹配下去。根据(2)的匹配过程,make程序发现第3行有目标文件main.o依赖于main.cpp,则比较目main.o与它的依赖文件main.cpp的文件新旧,如果main.o比main.cpp旧,则执行第4行的命令以产生目标文件main.o.在执行第4条命令时,main.cpp在文件makefile不再有依赖文件第定义,make程序不再继续往下匹配,而是执行第4条命令,产生目标文件main.o目标文
8、件func.o按照上面的同样方式判断产生.执行(3)、(4)产生完main.o和func.o以后,则第2行的命令可以顺利地执行了,最终产生了第1行的目标文件main.exe。特殊处理与伪目标先看一些makefile的特殊情况:makefile文件内容为a:@echo'a‘执行make时,如果文件a存在,echo‘a’将不会被调用,可以理解为文件a没有依赖文件,则认为文件a总是最新的,不需要执行;如果文件a不存在,echo‘a’将会被调用。a:b@echo'a‘如果文件b不存在,不管a是否存在,m
此文档下载收益归作者所有