18号c高级作业

1.Makefile(重点)

Makefile:用于工程项目管理的项目文件,就是一个文件命名为Makefile

Makefile: 实现自动化编译,提高开发速度

注意:当文件名makefile和Makefile同时存在时,优先执行makefile

当使用gcc编译多个文件时,无论文件是否发生修改,都需要重新编译,浪费时间

所以需要借助Makefile,如果文件没有发生修改则不编译,加快执行速度

Makefile是根据时间戳进行修改的

Makefile的执行流程

Makefile的分步编译:

汇编:把汇编文件生成目标文件

gcc  -c  ***.c   -o   ****.o

链接:生成可执行文件,二进制文件

gcc ***.o     -o     可执行文件

Makefile的结构

Makefile是由多个规则组成,一个规则是由目标,依赖,以及shell指令组成

规则的格式:

目标:依赖

(tab)         shell语句

 1.目标:满足命名规范,必须存在

2.依赖:可有可无,多个依赖之间使用空格隔开

3.注意:在写shell语句前面必须添加tab

第一版的Makefile

18号c高级作业_第1张图片

什么是make

make类似gcc是一个编译器

在执行时会根据Makefile的依赖关系依次向下执行

使用格式:

        make 目标

目标可有可无。如果存在则执行执行目标,如果不存在则默认执行那个第一个目标

没有make则需要安装: sudo apt-get install make

Makefile的变量定义

Makefile变量的赋值

=   延时赋值

等号的左边是延时变量,最后一次赋值的结果是最终结果

:= 立刻赋值

等号的左边是立刻赋值变量,在哪赋值在哪展开

+= 追加赋值

追加赋值变量的值中间使用空格隔开

?= 条件赋值

如果变量已经赋值则不发生赋值,否则赋值

第二版的Makefile

18号c高级作业_第2张图片

自动变量

自动变量默认是局部变量。默认在规则中有效

$@ :表示目标

$^ :表示所有依赖

$< :表示第一个依赖

* :通配符,匹配多个字符

% :模式匹配,按照某一模式进行匹配

第三版Makefile

18号c高级作业_第3张图片

Makefile的内置函数

wildcard: 匹配文件

   格式:$(wildcard PATTERN)

   PATTERN: 匹配的模式,在使用多和通配符结合使用

   使用格式: $(wildcard *.c)

patsubst:按照某种格式实现替换

   格式:$(patsubst PATTERN,REPLACEMENT,字符串)

   PATTERN:被替换的模式

   REPLACEMENT:要替换的模式

   字符串:文件名,中间使用空格隔开

    使用: $(patsubst %.c,%.o,1.c 2.c 3.c) ---->1.o 2.o 3.o

伪目标: .PHONY:目标

    当文件名和目标重名时,执行目标

通用版Makefile

18号c高级作业_第4张图片

2.GDB(The GNU Project Debugger)

什么是GDB

GDB:GNU项目调试器

一般来说,GDB主要帮助你完成下面四个方面的功能:

1、启动你的程序,可以按照你的自定义的要求随心所欲的运行程序。

2、可让被调试的程序在你所指定的调置的断点处停住。(断点可以是条件表达式)

3、当程序被停住时,可以检查此时你的程序中所发生的事。

4、你可以改变你的程序,将一个BUG产生的影响修正从而测试其他BUG。

GDB支持的语言

  • Ada
  • Assembly
  • C
  • C++
  • D
  • Fortran
  • Go
  • Objective-C

查看是否存在GDB

gdb --version

安装gdb:

sudo apt-get install gdb

使用gdb调试二进制文件

core文件,当执行程序遇到重大错误产生的镜像文件,保存现场

使用gdb调试core文件

使用gdb调试正在执行的程序

1.设置一个.c文件

2.使程序在运行中

gcc -g xxx.c -o 可执行文件

./可执行文件 保证程序正在执行

3.使用gdb调试

查看进程id

ps -ef | grep 可执行文件名

18号c高级作业_第5张图片

gdb 可执行程序 -p 进程id

4.如果不可以调试正在执行的程序,则需要以下操作

注意:在执行指令时,建议添加sudo权限

18号c高级作业_第6张图片

你可能感兴趣的:(笔记)