多个.c文件的混合编译

1.gcc

C语言编译器

gcc xxx.c -o xxx

-o :指定生成产物的名称

免费、开源、速度快(快30%)、占用内存小、gcc代码优化

gcc支持对代码进行三级优化

O0    不优化

O1    一级优化

O2    二级优化(常用)gcc xxx.c -O2 -o xxx

O3    三级优化

2.gdb(非重点)

db-->debugger除虫

若使用gdb,则需要在代码编译时,添加可选项 -g

gcc xxx.c -g -o xxx

-g:允许代码调试(默认是不允许的)

gdb调试代码:breakpoint(断点)

3.Make 工程管理器

C语言代码管理工具

最开始:make作为文件转换工具-->与gcc共同使用

make负责告诉gcc做什么,gcc负责做-->二期学习系统移植时,内核也是用make进行管理的

Make工程管理器的工作流程基于makefile(Makefile)文件

1)makefile三大要素

-->形式:

目标:依赖

规则

注意:规则前面需要缩进,缩进必须使用tab

1.目标(target):makefile生成的文件

2.依赖(dependency):生成目标文件需要依赖的前置条件

3.规则(rule):生成目标需要的指令

在执行makefile时,默认情况下makefile会复述一遍运行的规则;相当于进度条。若不想makefile复述规则,则可以在规则前添加@

makefile支持生成多个目标。若需要生成某个目标,则make目标名-->

-->若在make时未指定特定的目标,则默认生成第一个目标

依赖循环时,make会自动舍弃最后一个依赖关系

2)使用makefile管理代码

头文件的标准写法

#ifndef __MY_H_INCLUDE__
#define __MY_H_INCLUDE__//头文件的具体内容
#endif

必须要这么写,防止头文件被重复包含--->在预处理时头文件被替换

多次include只会执行一个include

※头文件内函数的声明与代码文件内函数的定义要匹配。如果不匹配编译器会报错

#include<>    在系统默认位置查找头文件

#include""      首先在本地查找,若未找到再在默认位置查找

-->   假目标

makefile可以根据当前文件的修改时间戳决定哪些代码需要二次编译-->只会针对于修改的文件进行二次编译

3)makefile自动推断

(1)makefile变量

变量赋值时,= 左右要加上空格

使用变量的值时,$(变量名)

(2)makefile自动推断变量

$@    需要生成的目标

$^    生成该目标需要的所有依赖

$<    生成该目标需要的一个依赖

(3)makefile通配符

%    匹配多个字符

以上三步之后-->

Linux C语言高级学习第八天(gcc代码优化makefile)相关推荐

  1. LV.2 Linux C语言高级

    ​ D1 软件包管理及shell命令 环境安装 装虚拟机需要将宿主机的虚拟化功能打开. 重启电脑. Linux介绍 1969年,由KenThompson在AT&T贝尔实验室实现的.使用的是用汇 ...

  2. Linux·C语言高级编程·attribute和section详解

    目录 01. 扩展关键字: attribute 02. 属性声明: section 03. 属性在Uboot中应用 01. 扩展关键字: attribute GNU C 增加一个 atttribute ...

  3. linux c语言编程内嵌汇编,gcc编译c语言中内嵌汇编

    gcc编译c语言中内嵌汇编 --AT&T and Intel 汇编语法对照 寄存器命名: AT&T:  %eax Intel: eax AT&T 语法源地址在左侧,目的地址在右 ...

  4. Ubuntu系统下C语言的简单使用及gcc和Makefile编译C程序

    Ubuntu18.04系统用C语言的编程. 一.网络设置 1. 下载 Ubuntu 18.04 2.下载 VMware Workstation 3.安装虚拟机 二.更换apt源 1.查看ubuntu的 ...

  5. 《全面掌握Linux C语言嵌入式系统移植教程》学习笔记(Liunx速查简明)

    全面掌握Linux C语言嵌入式系统移植教程学习笔记(Liunx速查简明) 笔记前言: P3: shell命令简明 P4: vi /vim编辑器入门 P5:vi /vim编辑器扩展 P8: gcc编译 ...

  6. linux中c语言结构体详解,Linux C语言结构体-学习笔记

    Linux C语言结构体简介 前面学习了c语言的基本语法特性,本节进行更深入的学习. 预处理程序. 编译指令: 预处理, 宏定义, 建立自己的数据类型:结构体,联合体,动态数据结构 c语言表达式工具 ...

  7. linux c语言学习_学习Linux是我们的爱情语言

    linux c语言学习 2019年是Cherry家族学习的一年. 我是一名高级软件工程师,致力于学习新技能,并且一路教给我的丈夫克里斯. 通过教给他一些我学到的东西,并请他完成技术演练文章,我帮助Ch ...

  8. Go 学习推荐 —(Go by example 中文版、Go 构建 Web 应用、Go 学习笔记、Golang常见错误、Go 语言四十二章经、Go 语言高级编程)

    Go by example 中文版 Go 构建 Web 应用 Go 学习笔记:无痕 Go 标准库中文文档 Golang开发新手常犯的50个错误 50 Shades of Go: Traps, Gotc ...

  9. 【Linux 操作系统】阿里云服务器 操作实战 部署C语言开发环境(vim配置,gcc) 部署J2EE网站(jdk,tomcat)

    . 作者 :万境绝尘  转载请注明出处 : http://blog.csdn.net/shulianghan/article/details/18964835 . 博客总结 : 设置SecureCRT ...

最新文章

  1. Node.Js 学习随笔2
  2. Dapr + .NET Core实战(二) 服务调用
  3. java简易日历程序报告_简单的日历小程序(java编写)
  4. JAVA设计模式之抽象工厂模式
  5. lnmp+lamp编译后,编译参数查看
  6. 四边形内接于圆定理_中考数学提分36计之第19计思维模型助你轻松搞定圆问题,提分必备...
  7. 麦克风阵列的同步性、一致性、峰值幅度、RMS、DC偏移
  8. H5-表格的基本样式
  9. [MATLAB]数据统计分析平均值(mean/median/sum/prod/cumsum)
  10. 3D视频调校技术解决之道重点在3D眼镜
  11. SpringSocial整合QQ授权登录
  12. maya检查模型重合点脚本
  13. 使用RabbitMQ出现Plugin configuration unchanged.问题
  14. 三位半?四位半?万用表显示位数到底怎么看?
  15. Elasticsearch7.x证书过期简单解决方法
  16. SELinux 学习总结
  17. STM32闭环步进电机驱动器方案,原理图,源码,PCB
  18. J2EE、J2SE、J2ME的区别
  19. 采购评标管理过程是怎样的?有哪些评标标准?
  20. [通用指导]Lenovo IdeaPad U330/U430/U530clover驱动完善

热门文章

  1. 小技巧--获取当前前台显示Activity
  2. 520 送女朋友礼物大全 (推荐男生收藏)
  3. JavaScript 之 ES6 去除数组重复元素
  4. 【Qt】disconnect一个lambda匿名函数
  5. java菜单栏尺寸设置_java – 如何设置JMenuItem的大小?
  6. H3CS-WLAN 无线工程师认证-郝文凯-专题视频课程
  7. 奥塔在线:高并发服务解决套路
  8. 艾瑞咨询发布国内首份数据库云管平台市场报告!
  9. DELL服务器磁盘分区
  10. PayPal开发文档整理(4)——PayPal商业商务平台之收款