Linux C语言高级学习第八天(gcc代码优化makefile)
多个.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)相关推荐
- LV.2 Linux C语言高级
D1 软件包管理及shell命令 环境安装 装虚拟机需要将宿主机的虚拟化功能打开. 重启电脑. Linux介绍 1969年,由KenThompson在AT&T贝尔实验室实现的.使用的是用汇 ...
- Linux·C语言高级编程·attribute和section详解
目录 01. 扩展关键字: attribute 02. 属性声明: section 03. 属性在Uboot中应用 01. 扩展关键字: attribute GNU C 增加一个 atttribute ...
- linux c语言编程内嵌汇编,gcc编译c语言中内嵌汇编
gcc编译c语言中内嵌汇编 --AT&T and Intel 汇编语法对照 寄存器命名: AT&T: %eax Intel: eax AT&T 语法源地址在左侧,目的地址在右 ...
- Ubuntu系统下C语言的简单使用及gcc和Makefile编译C程序
Ubuntu18.04系统用C语言的编程. 一.网络设置 1. 下载 Ubuntu 18.04 2.下载 VMware Workstation 3.安装虚拟机 二.更换apt源 1.查看ubuntu的 ...
- 《全面掌握Linux C语言嵌入式系统移植教程》学习笔记(Liunx速查简明)
全面掌握Linux C语言嵌入式系统移植教程学习笔记(Liunx速查简明) 笔记前言: P3: shell命令简明 P4: vi /vim编辑器入门 P5:vi /vim编辑器扩展 P8: gcc编译 ...
- linux中c语言结构体详解,Linux C语言结构体-学习笔记
Linux C语言结构体简介 前面学习了c语言的基本语法特性,本节进行更深入的学习. 预处理程序. 编译指令: 预处理, 宏定义, 建立自己的数据类型:结构体,联合体,动态数据结构 c语言表达式工具 ...
- linux c语言学习_学习Linux是我们的爱情语言
linux c语言学习 2019年是Cherry家族学习的一年. 我是一名高级软件工程师,致力于学习新技能,并且一路教给我的丈夫克里斯. 通过教给他一些我学到的东西,并请他完成技术演练文章,我帮助Ch ...
- 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 ...
- 【Linux 操作系统】阿里云服务器 操作实战 部署C语言开发环境(vim配置,gcc) 部署J2EE网站(jdk,tomcat)
. 作者 :万境绝尘 转载请注明出处 : http://blog.csdn.net/shulianghan/article/details/18964835 . 博客总结 : 设置SecureCRT ...
最新文章
- Node.Js 学习随笔2
- Dapr + .NET Core实战(二) 服务调用
- java简易日历程序报告_简单的日历小程序(java编写)
- JAVA设计模式之抽象工厂模式
- lnmp+lamp编译后,编译参数查看
- 四边形内接于圆定理_中考数学提分36计之第19计思维模型助你轻松搞定圆问题,提分必备...
- 麦克风阵列的同步性、一致性、峰值幅度、RMS、DC偏移
- H5-表格的基本样式
- [MATLAB]数据统计分析平均值(mean/median/sum/prod/cumsum)
- 3D视频调校技术解决之道重点在3D眼镜
- SpringSocial整合QQ授权登录
- maya检查模型重合点脚本
- 使用RabbitMQ出现Plugin configuration unchanged.问题
- 三位半?四位半?万用表显示位数到底怎么看?
- Elasticsearch7.x证书过期简单解决方法
- SELinux 学习总结
- STM32闭环步进电机驱动器方案,原理图,源码,PCB
- J2EE、J2SE、J2ME的区别
- 采购评标管理过程是怎样的?有哪些评标标准?
- [通用指导]Lenovo IdeaPad U330/U430/U530clover驱动完善