Makefile的基本使用

1、为什么要使用makefile

  • 在编译项目时,gcc相关参数非常多,如gcc *.c -I include -Wall -g -03 -D DEBUG -…..
  • 这是一个代码管理工具,外部编译时只需要执行makefile即可
  • 屏蔽编译的复杂过程,源代码以最简单的方式生成可执行程序

2、makefile的规则

  • 三要素:目标、依赖、命令
  • 第一条规则是用来生成终极目标的规则
    • 如果规则中的依赖不存在,向下寻找其他的规则;
    • 更新机制:比较的是目标文件和依赖文件的时间;
  • 两个函数:
    • 查找指定目录下,指定类型的文件:
    • src=$(wildcard ./*.c)
    • 匹配替换函数
    • obj=[......]

      继续阅读

静态库&动态库的基本制作与使用

1、命名规则

  • 静态库:lib+名称.a —> libSian.a
  • 动态库:lib+名称.so —> libSian.so

2、静态库制作

  • 准备目录:include、lib、src
  • 头文件存放在include中,源文件存放在src中,库文件存放lib中
  • 生成.o文件:在src目录中gcc -c *.c -I ../include // 大写i不是小写l
  • 生成.a文件:ar rcs lib/libCalc.a src/*.o // 将src下的所有.o文件在lib目录下生成.a文件
  • 利用静态库编译源文件:
    • gcc main.c lib/libCalc.a -o main.out -[……]

      继续阅读

gdb的基本使用

1、前期准备

  • gcc编译的时候要带参数-g,编译出来的可执行文件才带断点信息,否则无法断点;
    • gcc -g xxx.c -o xxx.out // xxx.c为源文件,.out为输出可执行文件名字

2、几条命令

  • list
    • 简写为l
    • 查看源代码,默认为main函数文件
    • l xxx.c:20,则是查看xxx.c的第20行代码
    • l xxx.c:main,查看xxx.c的main函数
    • 再次执行则是显示后续的内容
  • break n
    • n为代码行号,如break 37,可简写为b 37
    • 也可以跟条件,如:break 37 if xxx=xxx;
    • 行号也可以用函数名来代替,如bre[……]

      继续阅读

VIM的基本使用

1、光标移动

  • h —> 往前
  • j —> 往下
  • k —> 往上
  • l —> 往后
  • 0 —> 行首
  • $ —> 行尾
  • gg —> 文件首部
  • G —> 文件尾部
  • 20G —> 第20行

2、删除操作(实为剪切)

  • x —> 删除光标后字符
  • X —> 删除光标前字符
  • dw —> 删除光标后单词
  • d0 —> 删除到行首
  • d$、D —> 删除到行尾
  • dd —> 删除当前行
  • 4dd —> 删除当前开始的4行
  • u —> 撤销
  • Ctrl+r —> 反撤销
    [……]

    继续阅读

gcc的基本使用

1、gcc的编译过程 ( 参数分别为:E S c , 输出文件参数-o )

  • 预处理:.c —> .i C文件,头文件展开、宏替换、去注释
    gcc -E sum.c -o sum.i// 将sum.c预处理生成sum.i文件
  • 编译器:.i —> .s 汇编文件,C语言代码变成汇编代码
    gcc -S sum.i -o sum.s // 将预处理文件编译成汇编文件

  • 汇编器:.s —> .o 二进制文件,汇编代码变成二进制代码
    gcc -c sum.s -o sum.o // 将汇编代码汇编成二进制文件

  • 链接器:.o —> .out 可执行文件,将函数库中的代码组合到目标文件中
    gcc sum.o[......]

    继续阅读