Linux编程---GCC、GDB、Makefile

首先先说点编程基础,现在基本上学过c语言的都会了解vc、dev或者别的C语言编译工具吧,此处和vc类似只不过环境不同,大家可以结合起来去理解。
GCC程序编译
gcc是GNU推出的功能强大、性能优越的多平台编译器,可以在多种硬件平台上编译出可执行程序,其执行效率与一般的编译器相比平均效率要高20%~30%
GCC编译器能将C、C++语言源程序、汇编程序编译、连接成可执行文件。
Linux系统中,可执行文件没有统一的后缀,系统是根据文件的属性来区分可执行文件和不可执行文件,以下是各个后缀所代表的文件类型。
在这里插入图片描述
gcc基本使用方法:gcc [编译器所需要的编译选项(可以没有)] [要编译的文件名]
有人说我之前用的是gcc hello.c -o hello这种,我这个怎么不一样,其实平常大家发现没,有时候执行的直接是./a.out,而有时候却是./hello,其实这就取决于你编译时的命令,-o后面的hello就是确定可执行文件的名称,而如果没有也不影响,它的默认可执行文件就为a.out
此处的编译选项大约有100多个,此处只说明最基本的最常用的一些参数

-c:若为gcc -c hello.c 产生以.o为后缀的目标文件 hello.o (只编译不链接)
-g:产生调试工具所必要的符号信息,这个后面讲调试时也会提到
-O -O2 :对程序优化编译、链接,使程序效率更高,但编译链接的速度就会慢,-O2比-O更好的优化,但整个过程就更慢

-static:静态链接库文件,凡是包含这个库的应用程序都需要库的拷贝
动态链接库文件:应用程序需要时调用即可,多个应用程序共享一个拷贝

-Wall:生成所有警告信息
-w: 不生成任何警告信息
-DMACRO:定义MACRO宏,等效于在程序中使用#define MACRO

具体的大家可以自行百度,并且自己尝试着去运行程序了解各自的用法,管这样看肯定是不行的。
GDB类似于VC中的debug

此处说明调试步骤:
和前面一样,以hello.c文件名为例
首先进行编译:gcc -g hello.c -o hello(上面对-g进行过解释)
调试: gdb hello或者先执行gdb命令 再执行命令file 程序名
调试需要用到的命令:
单步执行(不进入子函数):next(n)
单步执行(进入子函数):step(s)
持续运行:continue©
几种打断点方法:break(b) 函数名(函数入口处)/行号/文件名:行号/行号 if 条件(条件为真断点生效)
运行程序:run®
查看程序:list(l)
查看所有设置的断点: info break
删除断点:delete 断点编号
查看指定变量值:print§ 变量名
运行程序直到当前函数结束:finish
对指定变量进行监控:watch 变量名
退出gdb:quit(q)
Makefile:

make用来构建和管理自己的软件工程,使整个软件工程的编译、链接只需要一个命令就可以完成,make在执行时,需要一个命名为Makefile的文件,它描述了整个工程的编译、连接等规则。
make命令默认在当前目录下寻找名字为Makefile的工程文件,若名字不是Makefile时,可以用make -f 文件名指定
规则:用于说明如何生成一个或多个目标文件
格式:
targets(目标):prerequisites(依赖)
TAB键command(命令)
举例:
hello:main.o func1.o func2.o
tab键gcc main.o func1.o func2.o -o hello(gcc $^ -o $@)
或者

obj=main.o func1.o func2.o
hello:$(obj)
tab键gcc $(obj) -o hello

$^代表所有的依赖文件
$@代表目标
$<代表第一个依赖文件

@: 取消回显
如下:
hello:main.o func1.o func2.o
gcc $^ -o $@
Makefile中把那些没有任何以来只有执行动作的目标成为“伪目标”
.PHONY : clean
clean:
rm -f hello main.o func1.o func2.o
“.PHONY”将“clean”目标生命为伪目标

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值