1.分文件编程
1.1源文件:
.c结尾的文件
包含main函数的.c
包含子函数的.c
1.2头文件:
.h结尾的文件
文件包含
头文件、宏定义、typedef、结构体、共用体、枚举、函数声明…
调用时用#include"xx.h"
#include< >与#include " "区别?
< >去系统默认路径下搜索头文件
" "先再当前路径下搜索,如果找不到就去系统默认路径下查找
系统默认搜索路径?
/usr/include
/usr/local/include
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
2.2gdb调试
gcc -g xx.c
gdb a.out
r:运行代码
l:查看文件
b 行号:添加断点
info b:查看断点信息
d num:删除断点,num是断点的编号(通过info b查看)
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读取的唯一配置文件
3.2Makefile格式
目标:依赖
命令
注意:命令前敲TAB
例如:写一个test.c文件,再写一个Makefile文件编译
为了避免同名文件可以加如下指令,利用clean伪目标执行删除指令
3.3Makefile管理多个文件
首先创建多个文件,如:
写一个Makefile文件:
执行
make
./test
3.4Makefile变量
自己定义的变量:一般用大写表示变量名,取变量的值用$(变量名)
= 递归方式展开
:= 直接赋值(当前的值是什么就立即赋值)
+= 追加新的值
?= 判断之前是否定义,如果定义了,不重新赋值,否则赋值
3.4.2预定义变量
RM 文件删除程序的名称,默认值为rm -f
CC C编译器的名称,默认值为cc。
CPP C预编译器的名称,默认值为$(CC) –E。
CFLAGS C编译器的选项,无默认值。
OBJS 生成的二进制文件或目标文件,自己定义
3.4.3自动变量
$< 第一个依赖的名称
$@ 目标文件的完整名称
$^ 所有不重复的依赖的名称
最后makefile可不断简化