GCC
.c c原始程序
.C/.cc/.cxx c++原始程序
.m objective-C原始程序
.i 已经预处理过的c原始程序
.ii 已经预处理过的c++原始程序
.s/.S 汇编原始程序
.h 预处理头文件
.o 目标文件
.a/.so 编译后的库文件
-E 生成预处理文件
-S 生成编译过的汇编文件
-c 目标文件 .o
-o 生成可执行文件
进入调试界面
gcc -g test.c -o test
gdb test
调试界面下 l +number 可查看第几个十行
b +行号 设置断点
info b 用于查看所有断点信息
del +number 取消第number个断点
n 单步执行 看不程序内部的运行情况
s 单步执行 可以看到内部的执行情况
c 直接运行到下一个断点
p argv[num] 查看第几个参数
set argv aa bb 是输入参数 表面上是输入两个 实际上还有一个参数 ./a.out 这个参数永远存在 且永远在第一个
q 退出调试
如果文件中调用了其他头文件 需要在最后加 -lm
Makefile
test:f1.o f2.o main.o
gcc f1.o f2.o -main.o -o test //如果想去除这一行 需要把test 换成 f1 f2 main 中的一个
f1.o:f1.c
gcc -c -wall f1.c -o f1.o
f2.o:f2.c
gcc -c -wall f2.c -o f2.o
main.o:main.c
gcc -c -wall main.c -o main.o
.PHQNY:clean // 伪目标 这样clean 永远都可以被执行 如果没有这条语句 当文件没有任何变动时
//clean不会执行
clean:
*.o test
在命令行执行make 然后通过 ./test 运行文件
$* 不包含拓展名的目标文件名称
$+ 所有的目标文件 可能含重复文件
$< 第一个依赖文件
$? 所有时间戳比目标文件晚的依赖文件
$@ 目标文件的完整名称
$^ 所有目标文件 不重复
$% 如果是归档成员 则表示归档成员的名称
make
-C 读取指定目录下的makefile文件
-f 把当前目录的普通file文件作为makefile文件执行
-n 只打印命令 但不执行
-s 只执行命令 但不显示
-i 忽略所有的执行错误
-w 如果在执行过程中要改变目录 则打印当前目录
-I 指定被包含的makefile文件所在目录
ps: 所有的头文件都被放到myinstdio.h 这个文件中 makefile 执行时找不到头文件
就可以在执行指令时加 -I +(myinstdio.h所在文件夹) 比如文件夹为include 指令为 gcc -c
-wall -I -include f1.c -o f1.o
-p 显示变量数据库和隐含规则
PS: test:f1/f1.o f2/f2.o main/main.o
gcc -c -wall -I -include -f1/f1.o -f2/f2.o main/main.o -o -test
先这种每个文件都在不同目录下 编写时很麻烦 所以引入VPATH环境变量
VPATH=f1 f2 main (把文件所在文件夹写入即可 ) 如下:
VPATH=f1 f2 main
test:f1.o f2.o main.o
gcc -c -wall -I -include -f1.o -f2.o main.o -o -test
转载:https://blog.csdn.net/hdc121214/article/details/100935464