gcc编译、gdb调试、makefile编程

  1. gcc编译基本语法,目标文件如果没有指明,就自动生成a.out文件
  2. gcc编译四个步骤:预处理、编译、汇编、链接
gcc [选项] 准备编译的文件 [选项] [目标文件]    

    gcc编译常用参数:

      • -I    指定头文件所在目录位置
      • -c    只做预处理、编译、汇编。得到二进制文件
      • -g    编译时添加调试文件,用于gdb调试
      • -Wall   显示所有警告信息
      • -D    向程序中“动态注册宏定义
      • -l     指定动态库库名
      • -L    指定动态库路径  

                         

 GDB调试

  使用gdb调试之前,要求对文件进行编译时增加-g参数,加了这个参数后会生成的编译文件会大一些,这是因为增加了gdb调试内容。

  基础指令:gdb ./ a.out

  1. list:list 1 列出源码。根据源码指定行号设置断点
  2. b:b20 在20行位置设置断点。
  3. run/r  :运行程序
  4. n/next: 下一条指令(会越过函数)
  5. s/step: 下一条指令   (会进入函数)
  6. p/print: p   i   查看变量的值。
  7. continue :继续执行断点后续指令
  8. finish :结束当前函数调用
  9. quit:推出gdb当前调试

  其他指令:

  1. run:使用run查找段错误出现位置
  2. set args:设置main函数命令行参数(在start、run之前)
  3. info b:查看断点信息表
  4. b 20 if i = 5 :设置条件断点
  5. ptype:查看变量类型
  6. bt:列出当前程序正存活者的栈帧
  7. frame:根据栈帧编号,切换栈帧
  8. display:设置跟踪变量
  9. undisplay:取消设置跟踪变量。使用跟踪变量的编号

Makefile编程:

   makefile:管理项目

    命名:makefile   Makefile  ---- make 命令

    1个规则:

      目标:依赖条件

          命令

        1. 目标的时间必须晚于依赖条件的时间,否则跟新目标

        2.依赖条件如果不存在,找寻新的规则去产生依赖条件。

      ALL:指定makefile的中级目标。

    2个函数:

      src = $(wildcard  ./* .c):匹配当前工作目录下的所有.c文件。将文件名组成列表,赋值给变量src。 src = add.c   sub.c  div1.c

      obj = $(patsubst  %.c, %.o, $(src)) :将参数3中,包含参数1的部分,替换为参数2.   obj= add.o  sub.o   div1.o

    clean:(没有依赖)

      -rm-rf $(obj) a.out "-": 作用是,删除不存在的文件时,不报错。顺序执行结束

    3个自动变量:

      $@:在规则的命令中,表示规则中的目标。

      $^:在规则的命令中,表示所有依赖条件

      $<:在规则的命令中,表示第一个依赖条件。如果将该变量应用在模式规则中,它可将依赖条件列表中的依赖依次取出,套用模式规则。

    模式规则:

      % .o : % .c

         gcc -c $< -o $@

    静态模式规则:

      $(obj) : %. o: % .c

        gcc - c $< - o $@

    伪目标:

      .phony:clean ALL

    参数:

      -n:模拟执行make、make clean命令

      -f:指定文件执行make命令。

        

posted @ 2022-07-27 16:24  陈尔东  阅读(241)  评论(0)    收藏  举报