(本文主要以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 删除生成文件:

转载于:https://blog.51cto.com/huobumingbai/308526

Linux下gcc与g++用法以及编写makefile相关推荐

  1. Linux下GCC与G++的区别和联系

    原文链接:https://www.linuxidc.com/Linux/2008-03/11943.htm GCC and g++分别是gnu的c & c++编译器 GCC/g++在执行编译工 ...

  2. linux下gcc、g++不同版本的安装和切换

    Ubuntu 18.04预装GCC版本为7.3,但有时在编译是需要用的不同gcc版本,下面介绍,如何安装不同的gcc 和g++,并设置根据不同的需要在不同版本之间切换. 1. 可以通过如下命令查看当前 ...

  3. Linux下gcc/g++编译器gdb调试器和makefile的使用

    文章目录 一.gcc的使用 gcc选项 二.gdb的使用 三.Linux项目自动化构建工具-make/Makefile 3.1 概念 3.2 使用 3.3 原理 一.gcc的使用 首先我们知道一个C/ ...

  4. linux 树状结构图,linux下tree指令的用法, 树状图列出目录, 树状图逐级列出目录...

    tree命令,主要功能是创建文件列表,将所有文件以树的形式列出来 linux下的tree就比较强大了,但一般系统并不自带这个命令,需要手动下载安装, 安装 sudo apt install tree ...

  5. (转)linux下find查找命令用法

    1.命令格式: find pathname -options [-print -exec -ok ...] 2.命令功能: 用于在文件树种查找文件,并作出相应的处理 3.命令参数: pathname: ...

  6. linux下tree指令的用法

    linux下tree指令的用法 (2010-04-20 23:23:48) 转载 标签: 杂谈 分类: linux学习笔记 首先来看tree的用法 tree 中文解释:tree 功能说明:以树状图列出 ...

  7. Linux 下 gcc的安装

    Linux 下 gcc的安装 gcc的安装 问题 检查版本 解决过程 gcc的安装 问题 在一个新的Linux服务器上安装nginx的时候,命令都不能解析,缺少gcc编辑器,安装gcc的命令也出错. ...

  8. Linux下Mysql的查询用法

    Linux下Mysql的查询用法 一.Mysql的delete删除语法 1.删除数据库 2.删除数据库的表 二.查询数据 1.基本查询 2.条件查询 三.数据库插入数据 1.创建新表 2.插入数据 四 ...

  9. Linux系统怎么编译sin,linux下gcc编译sin函数出错的问题

    linux下gcc编译sin函数出错的问题 收藏 Q: I keep getting errors due to library functions being undefined, but I'm ...

  10. linux下gcc编译c文件生成可执行文件的四个步骤

    Linux下gcc编译c文件为可执行文件分为四个步骤: 分别是 预编译.编译.汇编.链接. 1.预编译( 生成 hello.i 文件) 预编译的处理规则: 1. 将所有的 "#define& ...

最新文章

  1. Google发布“多巴胺”开源强化学习框架,三大特性全满足
  2. RocketMQ 基本概念
  3. 老子《道德经》第四十一章
  4. 广播模块加继电器怎么接线_变频器如何与PLC相连接,怎么用PLC控制?
  5. 一周要闻:为什么从百度离职,程序员五件事.......
  6. 模板—tarjan求割边
  7. centos7搭建superset数据平台
  8. 6.看板方法---价值流映射
  9. 爬取QQ好友列表或定位QQ好友秘密
  10. unity 导出 stl
  11. 终于搞定Linux下笔记本无线上网
  12. Android 4.0 人脸,Android 4.0.3!原道N90人脸识别试用
  13. (第三天)磁盘分区----LVE逻辑卷
  14. 初学者如何3步入门选吉他,附上新手购琴常见问题和吉他品牌推荐
  15. android+ue设计原则,【岗位课】移动端UI/UE设计湿
  16. ubuntu好用的输入法googlepinyin
  17. NV21 to NV12(YUV420SP)
  18. 科学家风采 | 2022 ACM杰出会员揭榜:本刊编委陈恩红教授入选!
  19. GRPC的四种数据流以及案例
  20. 高考报志愿,是一门玄学

热门文章

  1. 操作系统读写者问题实验报告_Linux操作系统存储子系统核心技术之硬盘与RAID
  2. 高德地图画带箭头的线_华耀室佳发光顶角线能否代替传统回型顶角线呢?
  3. java executor 例子_Java中Executor框架的实例
  4. grasshopper for rhino 6下载_漫谈算法设计与脚本语言(grasshopper, python)
  5. 客户端可以查询到数据,程序却查询不到数据
  6. SQL Server内存
  7. python 爬糗事百科
  8. Aspose.Words从零创建OOXML图表
  9. linux命令4--rmrmdir
  10. win32 sdk绘制ListBox控件