快速业务通道

Linux下gcc与g 用法以及编写makefile

作者 佚名技术 来源 Linux系统 浏览 发布时间 2012-04-20

(本文主要以gcc为演示,如果是C 程序直接将给 gcc改为g 即可) 1. gcc与g 编译流程: 1) 编译流程:

2) 预处理:生成.i的预处理文件. Ø 只激活预处理,这个不生成文件,需要把它重定向一个输出文件. Ø 演示:

3) 编译:生成.s的编译文件. Ø 只激活预处理和编译,把文件编译成汇编代码. Ø 演示:

4) 汇编:生成.o的汇编文件. Ø 只激活预处理、编译和汇编,把程序做成obj文件. Ø 演示:

5) 链接:生成链接文件. Ø 激活预处理、编译、汇编和链接. Ø 演示:

6) 惯用:

2. gcc与g 常用参数介绍: 1) -E Ø -E选项指示编译器仅对输入文件进行预处理.当这个选项被使用时,预处理器的输出被送到标准输出而不是储存在文件里. Ø 演示:

2) -S Ø -S选项告诉GCC在为C代码产生了汇编语言文件后停止编译.GCC产生的汇编语言文件的缺省扩展名是.s. Ø 演示:

3) -c Ø -c选项告诉GCC仅把源代码编译为目标代码.缺省时GCC建立的目标代码文件有一个.o的扩展名. Ø 演示:

4) -o Ø -o选项来为将产生的可执行文件用指定的文件名. 拥有帝国一切,皆有可能。欢迎访问phome.netØ 演示:

5) -O Ø -O选项告诉GCC对源代码进行基本优化,这些优化在大多数情况下都会使程序执行的更快,优化分为4个等级(-O0,-O1,-O2,-O3). -O0表示没有优化. -O1为缺省值,主要进行跳转和延迟退栈两种优化. -O2除了完成-O1的优化之外,还进行一些额外的指令调整工作. -O3除了完成-O2的优化之外,还进行包括循环展开和其他一些与处理特性相关的优化工作. Ø 演示:

其他优化等级的用法与演示中-O3的用法一样. 6) -x Ø 设定文件编译所使用的语言,使后缀名无效. Ø 演示:

7) -C Ø 在预处理的时候,不删除注释信息. Ø 演示:

8) -M Ø 生成文件关联信息.包含目标文件所依赖的所有源代码. Ø 演示:

2. 编写makefile: 1) 编写一个程序: Ø 共5个文件,3个.cpp文件,2个.h文件. Ø main.cpp:

Ø printf1.cpp:

Ø printf1.h:

Ø printf2.cpp:

Ø printf2.h:

Ø 常规编译: l 汇编main.cpp:

l 汇编printf1.cpp

l 汇编printf2.cpp

l 将3个obj文件链接到一个文件上:

l 运行:

l 总共生成的文件:

2) 运用makefile文件: 拥有帝国一切,皆有可能。欢迎访问phome.netØ 优点: 由上例可知,照这样的编译方法,如果是一个项目的话,可能存在上百个文件,岂不是太麻烦了,要把编译过程写进一个文件中:makefile. Ø 编写规则: l 以#号开始的为注释 l 具体编译过程: 对象:依赖项 编译方式 l makefile文本向右缩进时使用TAB键,不能用空格代替. Ø 编写(以上面得程序为例): l 创建makefile文件:

l 编写makefile文件: u 常用写法:

前三行类似一个变量的定义,取值时使用$(定义值)来取值. u 也可以写成:

等价于上面的写法,缺点是文件一旦过多,修改也不容易. l 运行makefile文件:

l 生成的文件:

l 运行目标文件:

l 删除生成文件:

拥有帝国一切,皆有可能。欢迎访问phome.net

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号