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
-
进入 GDB
需要在编译时加入调试信息:
gcc -g -o test test.c
[root@localhost gdb]# gdb test
#可执行文件 -
查看文件
l
-
设置断点:
b n
-
查看断点处情况:
info b
-
运行代码:
r
-
查看变量值:
p
-
观察变量:
在某一循环处,观察某一变量情况:
watch value
-
单步运行:
n
-
程序继续运行:
c
-
退出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....