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(断点)

Linux C语言高级学习第八天(gcc代码优化&makefile)_第1张图片

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会自动舍弃最后一个依赖关系

Linux C语言高级学习第八天(gcc代码优化&makefile)_第2张图片

2)使用makefile管理代码

Linux C语言高级学习第八天(gcc代码优化&makefile)_第3张图片

头文件的标准写法

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

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

多次include只会执行一个include

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

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

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

-->   假目标

Linux C语言高级学习第八天(gcc代码优化&makefile)_第4张图片

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

 

3)makefile自动推断

(1)makefile变量

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

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

(2)makefile自动推断变量

$@    需要生成的目标

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

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

(3)makefile通配符

%    匹配多个字符

 

以上三步之后-->

Linux C语言高级学习第八天(gcc代码优化&makefile)_第5张图片

 

 

 

 

你可能感兴趣的:(Linux)