小言_互联网的博客

GCC及Makefile基本使用教程

328人阅读  评论(0)

                                                                                         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
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场