Chinaunix首页 | 论坛 | 博客
  • 博客访问: 555801
  • 博文数量: 114
  • 博客积分: 1620
  • 博客等级: 上尉
  • 技术积分: 1104
  • 用 户 组: 普通用户
  • 注册时间: 2010-12-30 09:16
文章分类

全部博文(114)

文章存档

2016年(1)

2015年(2)

2014年(4)

2013年(9)

2012年(20)

2011年(78)

分类: 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

网上搜得其流程图如下:

 
autotools 生成的Makefile主要功能

1.make [all] 生成可执行文件

2 make install 生成可执行文件,并安装到系统目录如/usr/local/bin下。

3 make clean  清除之前编译生成的所有可执行文件及目标文件*.o

4 make dist     将程序与文档打包供发布

阅读(582) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~