目录
1.分文件编程
1.1源文件:.c结尾的文件
包含main函数的.c
包含子函数的.c
1.2头文件:.h结尾文件
头文件、宏定义、typedef 、结构体、共用体、枚举、函数声明
例如:
编译:gcc main.c fun.c
执行:./a.out
include引用时“”和<>的区别:
<>去系统目录查找头文件
“”先从当前目录下查找,如果没有再去系统目录查找头文件。
系统默认搜索路径?
/usr/include
/usr/local/include
追源码:
ctrl 单击
返回:
ctrl alt -
2.编译工具
2.1gcc编译工具
预处理:#开头内容,展开头文件、替换宏定义、删除无用注释,不会检查语法错误
gcc -E xx.c -o xx.i
编译:检查语法错误,有错就报错,无错就继续生成汇编文件
gcc -S xx.i -o xx.s
汇编: 将汇编文件生成不可执行的二进制文件
gcc -c xx.s -o xx.o
链接: 链接库文件,生成可执行的二进制文件
gcc xx.o -o xx
gcc xx.c ---> a.out
gcc xx.c -o xx ---> xx
2.2gdb调试
gcc -g xx.c
gdb a.out
r: 运行代码
l: 查看文件
b 行号或者函数名:添加断点
info b:查看断点情况
d num(断点编号):删除断点
p 变量名:查看变量的值
s/n: 单步运行,s会进入子函数顺序执行;单步跳过,n不会进入子函数
c: 执行到下一个断点的位置
help:帮助
q: 退出
步骤:代码写好后,先通过gcc -g进行编译代码,没有错误后,可以通过gdb a.out进行调试,输入l查看文件内容,通过b设置断点,输入r进行运行,n或s进行单步调试,q退出
3.make工具
3.1定义
make:工程管理器
make工程管理器就是一个“自动编译管理器”这里的“自动”是指它能构根据文件时间戳自动发现更新过的文件而减少编译的工作量,同时,它通过读入Makefile文件文件的内容来执行大量的编译工作。
Makefile或makefile是make读取的唯一配置文件
gcc hello.c main.c ---> a.out
gcc -c hello.c -o hello.o
gcc -c main.c -o main.o
gcc xx.o -o xx
3.2Makefile格式
目标:依赖
命令
注意:命令前敲TAB
gcc编译步骤中,可以按照如下步骤的逆序写Makefile文件
gcc -c xx.c -o xx.o 目标:xx.o 依赖:xx.c
gcc xx.o -o xx 目标:xx 依赖:xx.o
例如:写一个test.c文件,再写一个Makefile文件编译
使用make进行编译
3.3Makefile管理多个文件
首先创建多个文件,如:
写一个Makefile文件
3.4Makefile变量
3.4.1自定义变量
一般大写,取变量的值$(变量名)
= 按递归方式展开
:= 直接赋值 (当前的值是什么就立即赋值)
+= 追加新的值
?=判断之前是否定义,如果定义了,就不重新赋值;否则赋值
3.4.2预定义变量
系统预先定义好的一些变量,可能有默认值可能没有默认
RM 文件删除程序的名称,默认值为rm -f
CC C编译器的名称,默认值为cc。
CPP C预编译器的名称,默认值为$(CC) –E。
CFLAGS C编译器的选项,无默认值。
OBJS 生成的二进制文件或目标文件,自己定义
3.4.3自动变量
$< 第一个依赖的名称
$@ 目标文件的完整名称
$^ 所有不重复的依赖的名称
所有:%
总结: