分类: LINUX
2011-02-15 11:39:49
原文地址:http://blog.mcuol.com/User/lvembededsys/Article/2353_1.htm
今天晚上把LINUX下面的编程相关的工具熟悉了一下,主要有VI,Emacs,GCC,GDB,Makefile,autotools。初涉LINUX,上述工具其实任取一个都不是一时半会能整精熟的,但是往往每一种工具都有一些使用频率高达70%的命令。练习了一晚,对常见用法做个小结,巩固记忆。
一,VI:常用的源代码编辑命令。
vi hello.c 在当前目录下生成hello.c,并进入命令模式
在命令模式下,不能输入,可以完成删除,复制,粘贴等操作。
1)按i 或a或o进入插入模式,可以键入字符,一般用i; a与o稍有不同。
2)键dd删除光标所在行
3)数字(n)+dd删除光标开始向下n行
4)数字(n)+yy复制光标开始向下n行
5) p 粘贴到光标处
6)u 撤消上次操作
在插入模式下,按ESC进入底行模式,主要进行存盘和退出之类的操作
1) :wq 最常用,保存并退出
2):w [filename] 保存或另存
3):q! 强退出VI
二 gcc常见用法:
1)gcc -E hello.c -o hello.i //预处理
2)gcc -S hello.i -o hello.s //编译成汇编语言文件
3)gcc -c hello.s -o hello.o //汇编成目标代码
4)gcc -c hello.c -o hello.o //直接生成目标代码文件<最常用>
5)gcc hello.c -o hello //直接生成可执行文件
6)gcc hello1.o hello2.o -o hello //链接生成可执行文件<最常用>
常见选项 :
1) -g 生成GDB调试信息,用GDB工具此项必有
2) -I dir 编译过程中包括指定目录下的头文件
3) -L dir 可能需要到dir处链接库文件
4) -llibrary 链接动态libaray库。通常不带库名的前三个字母(lib),如 -lhello表示链接libhello.so动态库
5)-static 链接静态库
6) -Wall 允许所有有用的警告
7) -O (-O2或-O3)进行代码优化(分三级) ,一般不用在调试阶段
三 Gdb调试常见用法
gdb hello 进入调试 。编译时一定带-g选项。
常用操作:
1) l (list) 查看源代码
2) b(breakpoint) n :在第n 行设置断点
3) r (run) 运行
4) n(next) 单步执行,不进入函数内部,相当于VC下F10
5) s(step) 单步执行,进入函数内部,相当于F11
6) c(contiue) 继续执行,从当前运行处到下一个断点或者程序结束。
7) p var :查看变量var的当前值
8)finish 运行到程序结束
跟断点相关的有用命令:
1)info b 查看所有设置的断点的相关信息
2) b function 在function函数所在行设置断点
3) b 行数或函数名 if 表达式 满足表达式时运行中断 <感觉比较重要>
4) delete [断点号] 删除
5)disable [断点号] 禁用
6)enable[断点号]激活
若不带断点号,则命令对所有断点号用效,断点号可用info b得到。
7)ignore [断点号] N 忽略断点N次,对循环一类的程序有用。
查看运行过程中变量的有用命令:
print 表达式或变量
display 表达式 ,听说能自动显示对应表达式内容 (还没试过)
修改变量命令:
set var=value 设置变量值。
四 Makefile编写
用于自动编译生成目标或可执行文件,便于维护软件工程的升级修改等。
基本格式 :
target : dependency_files
command
如:
hello.o: hello.c hello.h
gcc -c hello.c -o hello.o
Makefile变量:
如:
OBJS=hello1.o hello2.o
CFLAGS=-Wall -O -g
CC=gcc
hello:$(OBJS)
$(CC) $(OBJS) -o hello
hello1.o:hello1.h hello1.c
$(CC) $(CFLAGS) -c hello1.c -o hello1.o
hello2.o:hello2.h hello2.c
$(CC) $(CFLAGS) -c hello2.c -o hello2.o
也可以用其隐式规则,则hello1.o,hello2.o的生成均不用显示写出,对每个*.o目标代码的生成自动套用下列规则:
*.o:*.c *.h
$(CC) $(CFLAGS) -c *.c -o *.o
自动变量的使用
$^: 表示所有的不重复依赖文件
$<: 第一个依赖文件
$@:目标文件的全名
使用模式规则
%.o:%.c
$(CC) $(CFLAGS) -c $< -o $@
Make 命令:
make 目标名 生成目标
make 生成第一个目标。
五 使用autotools :
自动生成Makefile文件
1) 运行autoscan dir 或在当前目录下运行autoscan 。生成configure.scan
2)编辑configure.scan 添加宏:AM_INIT_AUTOMAKE(可执行文件名,版本号)
更名为configure.in
3)运行aclocal 得到aclocal.m4
4)运行autoconf 生成configure可执行文件
5)运行autoheader 负责生成config.h.in文件 //此步不算重要。
6)创建并编辑Makefile.am文件:
AUTOMAKE_OPTIONS=foreign
bin_PROGRAMS=hello (此处是可执行文件)
hello_SOURCES=hello.c hello.h (此处是依赖文件)
保存
7)运行automake 将Makefile.am 生成Makefile.in
8)运行configure可执行文件,将Makefile.in生成Makefile
9)运行make 即可生成hello
网上搜得其流程图如下:
1.make [all] 生成可执行文件
2 make install 生成可执行文件,并安装到系统目录如/usr/local/bin下。
3 make clean 清除之前编译生成的所有可执行文件及目标文件*.o
4 make dist 将程序与文档打包供发布