Makefile学习笔记(三)
来源:互联网 发布:c语言函数求最小公倍数 编辑:程序博客网 时间:2024/05/21 06:30
Makefile学习笔记(三)
概述
只依靠简单的变量和模式规则写一个复杂项目的Makefile是比较困难的,也不是不能写,只是源文件一多,模式规则的量就很大。庆幸的是,make提供了一些函数,可以很方便地写出复杂项目的Makefile。这里就来记录一下两个比较常用的make函数。
make函数调用形式
make函数调用,与变量获取形式类似: $(func param),参数param根据所调用函数来传递,参数间用’,’隔开。
wildcard
考虑一种情况,某文件夹下的源文件编译之后产生的.o文件,将被其他部分链接,该文件夹下的源文件又比较多,手打的话,也是很麻烦的一件事。这里使用make提供的wildcard函数就很方便了,wildcard可用于获取工作目录下符合匹配模式的文件列表,比如:
$(wildcard *.c) # 获取工作目录下的后缀为c的源文件列表,以空格形式隔开
有了wildcard,在编写数目较大的模式规则时就方便多了,只要写出合适的匹配模式即可。
patsubst
patsubst主要用于文本替换,函数原型为: $(patsubst parttern, replacement, text),当text中有满足pattern的部分时,以replacement替换该部分。比如:
$(patsubst %.c, %.o, $(wildcard *.c)) # 获取工作目录下c文件列表,并将文本中的后缀c改为后缀o
只看这些,可能还是不能很好的理解这两个函数,下面就以一个万能Makefile模板来说明上面两个函数的运用。
实例
CC := clangLIBS :=LDFLAGS :=DEFINES :=INCLUDE := -I ./CFLAGS := -std=c11 -Wall -g $(DEFINES) $(INCLUDE)CXXFLAGS := -std=c++14 -Wall -g $(DEFINES) $(INCLUDE)SOURCE := $(wildcard *.c) # 获取工作目录下的源文件列表 OBJS := $(patsubst %.c, %.o, $(SOURCE)) # 将文本中后缀c的部分换为后缀o TARGET := test all: $(TARGET) @echo $(SOURCE) @echo $(OBJS) $(TARGET): $(OBJS) $(CC) $(CFLAGS) -o $@ $(OBJS) $(LDFLAGS) $(LIBS) objs: $(OBJS) # 依赖make隐式推导,编译.c文件为对应名称的.o文件 clean: @rm -f *.o @rm -f $(TARGET)
上面这段万能Makefile适用于C项目,由wildcard、patsubst和make的隐式规则推导构成。all下的echo可以看出两个函数的结果,稍微理解一下就清楚怎么用了。
阅读全文
0 0
- Makefile学习笔记(三)
- makefile学习笔记(三)
- C++ 学习笔记(三) 编写makefile
- Makefile 学习笔记(三)实例
- 简单的makefile文件三种写法学习笔记
- C++ 学习笔记(三) 编写makefile(二)
- Make编译学习笔记(三)Makefile基本规则
- U-Boot学习笔记(三):顶层Makefile分析
- Makefile学习(三)
- Makefile学习(三)
- Makefile学习笔记
- makefile学习笔记
- makefile学习笔记(1)
- Makefile学习笔记
- MakeFile学习笔记一
- makefile学习笔记
- makefile学习笔记
- Makefile的学习笔记
- poj 1026 Cipher【置换群*循环节】
- CC PRIMEDST(点分治+FFT)
- 使用Unity仿奥日弹射
- cartographer源码分析(19)-sensor-range_data.h
- malloc()与calloc()的区别
- Makefile学习笔记(三)
- Mybatis一对多查询的子对象集合中对象数目不对
- map映射,适配器,算法
- 音视频直播技术漫谈
- 学习笔记
- 英语前缀总结
- Maximum Sequence 贪心 优先队列
- 机器学习笔记--微积分
- 动态规划? 最大连续子序列和