makefile

来源:互联网 发布:ptgui mac 汉化破解版 编辑:程序博客网 时间:2024/05/19 13:16


makefile中的自动变量:

变量含义

$*

表示目标文件的名称,不包含目标文件的扩展名

$+

表示所有的依赖文件,这些依赖文件之间用空格分开,按照出现的先后为顺序,其中可能包含重复的依赖文件

$<

表示依赖项中第一个依赖文件的名称

$?

依赖项中,所有目标文件时间戳晚的依赖文件,依赖文件之间以空格分开

$@

目标项中目标文件的名称

$^

依赖项中,所有不重复的依赖文件,这些文件之间以空格分开

 

Makefile的函数:

1、获取匹配模式的文件名wildcard

例:$(wildcard *.c) 返回当前目录下所有扩展名为.c的文件列表

2、模式替换函数patsubst

例: $(patsubst %.c, %.o, $(wildcard *.c)) 将wildcard获取的文件列表中所有的.c文件名替换成.o的文件列表。

3、循环函数foreach

$(foreach VAR, LIST, TEXT) 将LIST字符串中的一个空格分隔的单词,先传给临时变量VAR, 然后执行TEXT表达式,TEXT表达式处理结束后输出,其返回值是空格分隔表达式TEXT的计算结果。

一个简单的makefile例子

CC = gccCFLAGS = -Iinclude -O2TARGET = testRM = rm -fOBJS = xx1.o xx2.o dir/xx3.o$(TARGET): $(OBJS)$(CC) $@ -o $^ $(CFLAGS)$(OBJS): %.o:%.c$(CC) $< -c $(CFLAGS) -o $@clean:-$(RM) $(TARGET) $(OBJS)注:- 号表示当操作失败时不报错,命令继续执行



 

Makefile嵌套使用:
1、 总控Makefile

CC = gccCFLAGS = -O2RM = rm -fTARGET = testexport OBJSDIR = $(shell pwd)/.ojbs   (传递变量给下层Makefile)$(TARGET): $(OBJSDIR) main.o$(MAKE) -C dir1    (在目录dir1中调用make)$(MAKE) -C dir2    (在目录dir2中调用make)$(CC) -o $(TARGET) $(OBJSDIR)/*.omain.o: %.o:%.c$(CC) -c $< -o $(OBJSDIR)/$@ $(CFLAGS) -Iinclude$(OBJSDIR):mkdir -p $(OBJSDIR)clean:-$(RM) $(TARGET)-$(RM) $(OBJSDIR)/*.o

2、 子目录Makefile

all: $(OBJS)$(OBJS):%.c:%.o$(CC) -c $< -o $(OBJSDIR)/$@ $(CFLAGS)  (CC和OBJSDIR在总控Makefile中声明)clean:$(RM) $(OBJS)


 

 

 

原创粉丝点击