多个.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通配符
% 匹配多个字符
以上三步之后-->