分类: LINUX
2008-06-20 17:36:37
1.目标和依赖间的语法格式如下:
TARGETS : PREREQUISITES
COMMAND
...
或者:
TARGETS : PREREQUISITES ; COMMAND
COMMAND
...
2.函数wildcard
$(wildcard *.c)
为什么不用通配符?
因为通配符在Makefile中使能用在两种场合
(1)可以用在规则的目标、依赖中,make在读取Makefile时会自动对其进行匹配处理(通配符展开);
(2)可出现在规则的命令中,通配符的通配处理是在shell在执行此命令时完成的。
3.自动化变量
“$^”代表所有通过目录搜索得到的依赖文件的完整路径名(目录 + 一般文件名)列表。
“$@”代表规则的目标。所以对于一个规则我们可以进行如下的描述:
foo.o : foo.c
cc -c $(CFLAGS) $^ -o $@
4.通配符“~”
代表当前用户的宿主目录,比如‘~/bin'代表目录/home/username/bin
5.条件执行
ifeq ($(CC),gcc)
libs=$(libs_for_gcc)
else
libs=$(normal_libs)
endif
foo: $(objects)
$(CC) -o foo $(objects) $(libs)
6.更新静态库
ar用来创建或给静态库增加一个成员
ranlib用来更新静态库的符号索引表
$(SYSTEM_EVENT_LIB): $(SYSTEM_EVENT_OBJS)
$(AR) cru $@ $^
$(RANLIB) $@
7.变量引用、赋值
CROSS = arm_v5t_le-
AR = $(CROSS)ar
RANLIB = $(CROSS)ranlib