GCC GDB make

GCC

  • 预处理(Pre-Processing)

  • 编译(Compiling)

  • 汇编(Assembling)

  • 链接(Linking)

    [root@localhost gcc]# gcc –E –o hello.i hello.c		#-E停留在预处理,生成.i文件 -预处理
    [root@localhost gcc]# gcc –S –o hello.s hello.i		#-S停留在编译,生成.s文件	-编译
    [root@localhost gcc]# gcc –c hello.s –o hello.o		#-c停留在汇编,生成.o文件	-汇编
    [root@localhost gcc]# gcc hello.o –o hello			#生成可执行文件	-链接
    

警告:

-Wall 打开所有类型语法警告
-ansi 强制 GCC 生成标准语法所要求的告警信息
-pedantic 允许发出 ANSI C 标准所列的全部警告信息

Linux函数库:

Linux 中函数库包括两类:静态库和共享库
在 Linux 系统中系统所用的库都存放在/usr/lib 和/lib 目录中

-I

选项可以在头文件的搜索路径列表中添加 目录
[root@localhost gcc] gcc hello.c –I/root/workplace/gcc/ -o hello

-L

可用于指明库 文件的路径
[root@localhost gcc] gcc hello_sq.c –L/root/workspace/gcc/lib –lsunq –o hello_sq # 用到lsunq.so库

GDB

  1. 进入 GDB

    需要在编译时加入调试信息:gcc -g -o test test.c

    [root@localhost gdb]# gdb test #可执行文件

  2. 查看文件

    l

  3. 设置断点:

    b n

  4. 查看断点处情况:

    info b

  5. 运行代码:

    r

  6. 查看变量值:

    p

  7. 观察变量:

    在某一循环处,观察某一变量情况: watch value

  8. 单步运行:

    n

  9. 程序继续运行:

    c

  10. 退出GDB:

    q

make

在一个Makefile 中通常包含如下内容:

  • 需要由make 工具创建的目标体(target),目标体通常是目标文件、可执行文件
    或是一个标签。
  • 要创建的目标体所依赖的文件(dependency_file)。
  • 创建每个目标体时需要运行的命令(command)。

使用:~$ make target

OBJS = main.o kbd.o command.o display.o \	#makefile变量:
insert.o search.o files.o utils.o			#递归定义:CFLAGS = $(CFLAGS) - O 容易导致死循环
CC = gcc									#简单定义:VAR:= var 只展开一次
CFLAGS = -Wall -O -g
edit :$(OBJS)
	$(CC) $^ -o $@				#命令前必须要有一个tab键 $^:所有不重名依赖 $@:目标完整名字
main.o : main.c defs.h
	$(CC) $(CFLAGS) -c $< -o $@
kbd.o : kbd.c defs.h command.h				#隐式规则:可省略
command.o : command.c defs.h command.h		#c编译:.c变为.o
display.o : display.c defs.h buffer.h		#$(CC) -c $(CPPFLAGS) $(CFLAGS)
insert.o : insert.c defs.h buffer.h
search.o : search.c defs.h buffer.h
files.o : files.c defs.h buffer.h command.h
utils.o : utils.c defs.h
clean :
	rm edit $(OBJS)
	
使用:make edit main.o kbd.o....
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值