gcc编译多个文件与makefile应用
来源:互联网 发布:淘宝有什么好吃的水果 编辑:程序博客网 时间:2024/05/29 19:05
zz : http://huobumingbai.blog.51cto.com/1196746/308526
cc=g++
#internal file
obj=hello.o main.o
#output file name
output=a.out
all: $(obj)
$(cc) -o ${output} ${obj}
$(cc) -c hello.cc -o hello.o
$(cc) -c main.cc -o main.o
-rm -rf ${obj} ${output}
#加一个“-”可以使得rm命令忽略错误信息
(本文主要以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:
Ø 常规编译:
l 汇编main.cpp:
l 汇编printf1.cpp
l 汇编printf2.cpp
l 将3个obj文件链接到一个文件上:
l 运行:
l 总共生成的文件:
2) 运用makefile文件:
Ø 优点:
由上例可知,照这样的编译方法,如果是一个项目的话,可能存在上百个文件,岂不是太麻烦了,所以要把编译过程写进一个文件中:makefile。
Ø 编写规则:
l 以#号开始的为注释
l 具体编译过程:
对象:依赖项
编译方式
l makefile文本向右缩进时使用TAB键,不能用空格代替。
Ø 编写(以上面得程序为例):
l 创建makefile文件:
l 编写makefile文件:
u 常用写法:
前三行类似一个变量的定义,取值时使用$(定义值)来取值。
u 也可以写成:
等价于上面的写法,缺点是文件一旦过多,修改也不容易。
l 运行makefile文件:
l 生成的文件:
l 运行目标文件:
l 删除生成文件:
0 0
- gcc编译多个文件与makefile应用
- Makefile 编译多个文件
- GCC 编译多个文件
- gcc编译多个函数文件的Makefile写法(单链表的插入和合并等功能)
- gcc/g++编译makefile文件
- gcc编译步骤,gcc编译多个文件
- C++编译多个文件makefile
- GCC编译多个C文件
- GCC编译多个c文件
- gcc编译多个c文件
- gcc编译多个c文件
- makefile文件和gcc g++ gdb编译
- gcc编译以及Makefile与GDB调试
- 多文件编译 makefile
- makefile多文件编译
- gcc多文件编译
- GCC多文件编译
- 使用makefile编译多个目标文件的方法
- unity2D 忽略物体之间的碰撞
- Spiral Matrix II
- TortoiseSVN使用
- LNK1123: 转换到 COFF 期间失败: 文件无效或损坏
- Hash
- gcc编译多个文件与makefile应用
- linux 修改错误配置项
- UVa 10763 - Foreign Exchange
- 编写高质量代码——谨防因构造函数抛出异常而引发的问题
- 浅谈free函数的用法
- 计算机科学-第14周模块化程序设计 题目及参考解答
- 电梯算法
- reverse_all_part_words
- python实习