找回密码
 注册
搜索
热搜: 回贴
微赢网络技术论坛 门户 服务器 Linux/BSD 查看内容

linux内核分析三

2009-12-20 13:33| 发布者: admin| 查看: 34| 评论: 0|原作者: 慕容紫英

OBJCOPY
可以将一种格式的目标



3. List:列出源码
4. Break行数:在可疑点第几行设置断点
5. Next:一步步执行看看
6. Print string:显示下返回什么东东
*******************************************************************************
MAKE
我之前就有过过于Makefile的写法的文章,这里不再说了,说点之前没有提到的东西
Make可以识别出makefile中哪些文件已经被修改,并且在再次编译的时候只编译这些文件,从而提高编译的效率
Make会检查文件的修改和生成时间戳,如果目标文件的修改或者生成时间戳比它的任意一个依赖文件旧,则make就执行makefile文件中描述的相应

工作
提供和识别多种默认规则,方便对大型软件项目的管理
支持对多目录的软件项目进行递归管理
对软件项目具有很好的可维护性和扩展性
default goal:在缺省的情况下,make从makefile中的第一个目标开始执行
Make的工作过程类似一次深度优先遍历过程
使用变量可以降低错误风险,简化makefile
例:objects变量($(objects))
objects = main.o kbd.o command.o \
display.o insert.o search.o files.o utils.o
edit : $(objects)
cc -o edit $(objects)
变量可以被用来贮存一个文件名列表。贮存可执行文件名。如用变量代替编译器名。贮存编译器FLAG
.PHONY : clean
clean :
rm edit $(objects)
.PHONY:是一个伪目标,是假定该目标不存在,进行相应的更新或其他操作
若工作目录存在同名文件,则.Phony不工作。
$@扩展成当前规则的目的文件名
$扩展成依赖列表中的第一个依赖文件
$^扩展成整个依赖列表(除掉了里面所有重复的文件名)
小例子:
CC = gcc
CFLAGS = -Wall -O -g
foo.o : foo.c foo.h bar.h
$(CC) $(CFLAGS) -c $
设置目标Phony Targets
设定目标,目标不是一个文件,其目的是为了让一些命令得以执行
使用PHONY显式声明设定目标,.PHONY: clean
使用设定目标实现多个目的,all: prog1 prog2
设定目的也可以用来描述一些其他的动作。例如,想把中间文件和可执行文件删除,可以在makefile里设立这样一个规则:
clean:
$rm *.o exec_file
前提是没有其它的规则依靠这个'clean'目的,它将永远不会被执行。但是,如果你明确的使用命令'make clean',make会把这个目的做为它的主要目标,执行那些rm命令
Makefile中的函数:
使用方法:
$(函数名参数列表)
例如:$(substfrom,to,text)函数是说把text中的from串换成to
具体的$(subst ee,EE,feet on the street)相当于`fEEt on the strEEt'
$(patsubstpattern,replacement,text)
Patsubst是匹配替换的缩写
它需要3个参数——第一个是一个需要匹配的式样,第二个表示用什么来替换它,第三个是一个需要被处理的由空格分隔的字列。
例如,处理那个经过上面定义后的变量,
OBJS = $(patsubst %.c,%.o,$(SOURCES))
这行将处理所有在SOURCES字列中的字(一列文件名),如果它的结尾是'.c',就用'.o'把'.c'取代。注意这里的%符号将匹配一个或多个字符,而它每次所匹配的字串叫做一个‘柄’(stem)。在第二个参数里,%被解读成用第一参数所匹配的那个柄。
$(wildcardpattern)
它有一个参数,功能是展开成一列所有符合由其参数描述的文件名,文件间以空格间隔。
你可以像下面所示使用这个命令:
SOURCES = $(wildcard *.c)
这行会产生一个所有以'.c'结尾的文件的列表,然后存入变量SOURCES里。当然你不需要一定要把结果存入一个变量。
Makefile的四种条件语句
ifeq...else...endif
ifneq…else…endif
ifndef…else…endif
ifndef...else…endif
*******************************************************************************
LD:

和函数地址,最终生成可执行程序
gcc可以间接的调用ld,使用gcc的-Wl参数可以传递参数给ld
使用命令:ld --help可以列出ld常用的一些选项








最新评论

QQ|小黑屋|最新主题|手机版|微赢网络技术论坛 ( 苏ICP备08020429号 )

GMT+8, 2024-9-30 11:39 , Processed in 0.082293 second(s), 12 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

返回顶部