鸿 网 互 联 www.68idc.cn

linux gcc make命令使用规则

来源:互联网 作者:佚名 时间:2015-10-09 05:50
Linux下gcc与g用法以及编写makefile 2010-05-02 20:46:45 标签:Linuxgccmakefile休闲g 版权声明:原创作品,如需转载,请与作者联系。否则将追究法律责任。 (本文主要以gcc为演示,如果是C程序直接将给 gcc改为g即可) 1. gcc与g编译流程: 1) 编译流程: 2)
Linux下gcc与g++用法以及编写makefile
2010-05-02 20:46:45
标签:Linux gcc makefile 休闲 g++
版权声明:原创作品,如需转载,请与作者联系。否则将追究法律责任。

 

(本文主要以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选项来为将产生的可执行文件用指定的文件名。
演示:

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:

常规编译:
汇编main.cpp:

汇编printf1.cpp

汇编printf2.cpp

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

运行:

总共生成的文件:

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

编写makefile文件:
常用写法:

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

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

生成的文件:

运行目标文件:

删除生成文件:

本文出自 “活不明白的博客--技术..” 博客,转载请与作者联系!



网友评论
<