- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第一章 LINUX下编译与调试 学习目标 gcc/g++编译命令 对于.c格式的C文件,可以采用gcc或g++编译 对于 .cc、.cpp格式的C++文件,应该采用g++进行编译 常用的选项两种 -c 表示编译源文件 -o 表示输出目标文件 -g 在目标文件中产生调试信息,用于gdb调试 -D 宏定义 编译时将宏定义传入进去 -Wall 选项可以打开所有类型的语法警告,以便帮助我们确定代码是正确的,并且尽可能实现可移植性。 编译和连接的方式 1、g++ -c func.cpp 将编译func.cpp,并且生成同名的但扩展名为.o的二进制目标文件 func.o 同样道理 g++ -c main.cpp 将编译main.cpp,并且生成同名的但扩展名为.o的二进制目标文件 main.o 2、g++ -c func.cpp -o func.o 功能同(1)一样,但是显式地指定了输出文件名为main.o 同样道理 g++ -c main.cpp –o main.o 编译main.cpp,并输出目标文件main.o 3、(1)、(2)的基础上 ? g++ main.o func.o ? g++ -o a.out main.o func.o ? g++ -o a.out *.o 都将连接目标文件main.o和func.o最后形成可执行文件a.out 对于第一种,如果没有显式指定可执行文件名,g++默认为a.out 编译和连接的方式 也可以将编译和链接的过程合为一块处理: g++ *.cpp g++ func.cpp main.cpp g++ -o a.out func.cpp main.cpp 都将先编译指定的源文件,如果成功的话,再链接成可执行文件a.out 采用第4种方式,在其中第某个源文件中必须有main函数,否则链接通不过。 如果希望在编译时传入宏定义,可使用-D参数,例如 g++ -D _DEBUG *.cpp 什么是makefile makefile的工作过程为:先将需要编译连接的c/c++源文件组织到文件makefile中,接着运行make程序,make程序读取当前文件夹下面的makefile文件信息,并根据makefile里面的组织信息,调用相应的gcc/g++/shell等程序,完成对源文件的批量编译和连接。要写makefile文件,首页必须清楚目标文件和依赖文件的概念。通常情况下,目标文件和依赖文件都是指实际的文件。 例如,有makefile文件,内容如下: main.exe:main.o func.o g++ -o main.exe main.o func.o main.o:main.cpp g++ -c main.cpp func.o:func.cpp g++ -c func.cpp Makefile文件的依赖关系 文件第一行中的文件main.exe称为目标文件,冒号后面以空格分隔的两个文件称为main.exe的依赖文件。意思是文件main.exe的产生依赖于文件main.o和func.o 同样道理: 第3行的main.o为目标文件,main.cpp为main.o的依赖文件。 第5行的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中的其他定义,看有没有以第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目标文件func.o按照上面的同样方式判断产生. 执行(3)、(4)产生完main.o和func.o以后,则第2行的命令可以顺利地执行了,最终产生了第1行的目标文件main.exe。 特殊处理与伪目标 先看一些makefile的特殊情况: makefile文件内容为 a: @echo a‘ 执行make时,如果文件a存在,ec
您可能关注的文档
最近下载
- 体检报告电子版.docx VIP
- 2023年江苏省健康照护行业职业技能竞赛备考题库大全-下(判断题汇总).doc VIP
- 2024年8月17日国家综合性消防救援队伍消防员招录面试真题及答案解析(上午卷).doc VIP
- GA 1467-2018 城市轨道交通安全防范要求.docx VIP
- 羽毛球课程教学大纲.docx VIP
- 接正式电方案.pdf
- 2024年甘肃定西岷县城区部分学校竞聘教师实施(238人)笔试备考试题及答案解析.docx VIP
- DB11∕T 646.1-2016 城市轨道交通安全防范系统技术要求 第1部分:通则.docx VIP
- NIST SP 800-218 SSDF安全软件开发框架.xlsx
- 临床试验病理科专业标准操作规程SOP-2025年版.docx
文档评论(0)