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)
- Makefile
- Makefile
- makefile
- makefile
- makefile
- Makefile
- Makefile
- Makefile
- Makefile
- Makefile
- Makefile
- makefile
- Makefile
- makefile
- Makefile
- makefile
- makefile
- makefile
- c++ stack unwinding
- webwork拦截器interceptor 之 ActionInvocation 意义
- Spring--quartz中cronExpression配置说明
- ios LLVM 4新功能
- [Python]网络爬虫(九):百度贴吧的网络爬虫(v0.4)源码及解析
- makefile
- 遇到的问题-----------定义一个全局变量,在page_load里赋值,但在其他按钮中调用仍为空
- 根据日期计算星期
- Java中的Set,List,Map的区别
- Wifi模块分析
- Android动态连接器linker与静态连接器ld
- 浅析恒流源与恒压源及其应用
- javax.jms.JMSException: Failed to build body from bytes. Reason: java.io.IOException
- 文献检索与论文写作