1、wildcard : 扩展通配符 2、notdir : 去除路径 3、patsubst :替换通配符
例子: 建立一个测试目录,在测试目录下建立一个名为sub的子目录 $ mkdir test $ cd test $ mkdir sub
在test下,建立a.c和b.c2个文件,在sub目录下,建立sa.c和sb.c2 个文件
建立一个简单的Makefile src=$(wildcard *.c ./sub/*.c) dir=$(notdir $(src)) obj=$(patsubst %.c,%.o,$(dir) )
all: @echo $(src) @echo $(dir) @echo $(obj) @echo "end"
执行结果分析: 第一行输出: a.c b.c ./sub/sa.c ./sub/sb.c
wildcard把 指定目录 ./ 和 ./sub/ 下的所有后缀是c的文件全部展开。
第二行输出: a.c b.c sa.c sb.c notdir把展开的文件去除掉路径信息
第三行输出: a.o b.o sa.o sb.o
在$(patsubst %.c,%.o,$(dir) )中,patsubst把$(dir)中的变量符合后缀是.c的全部替换成.o, 任何输出。 或者可以使用 obj=$(dir:%.c=%.o) 效果也是一样的。
这里用到makefile里的替换引用规则,即用您指定的变量替换另一个变量。 它的标准格式是 $(var:a=b) 或 ${var:a=b} 它的含义是把变量var中的每一个值结尾用b替换掉a
今天在研究makefile时在网上看到一篇文章,介绍了使用函数wildcard得到指定目录下所有的C语言源程序文件名的方法,这下好了,不用手工一个一个指定需要编译的.c文件了,方法如下:
SRC = $(wildcard *.c)
等于指定编译当前目录下所有.c文件,如果还有子目录,比如子目录为inc,则再增加一个wildcard函数,象这样:
SRC = $(wildcard *.c) $(wildcard inc/*.c)
也可以指定汇编源程序: ASRC = $(wildcard *.S)
这样一来,makefile模板可修改的基本就是AVR名称和时钟频率了,其它的一般不用动了。
|
相关推荐
### Makefile之通配符探究 #### 一、引言 Makefile 是一种用于构建项目的自动化工具,通过定义目标和依赖关系来管理软件构建过程。本文将深入探讨 Makefile 中常用的三种通配符处理方式:`wildcard`、`notdir` 和 ...
SRCS = $(wildcard *.c) OBJS = $(SRCS:.c=.o) PROG = myprogram ``` - **宏的引用**:在 Makefile 中引用宏时,需要在宏名前面加上 `$` 符号。例如: ```make all: $(OBJS) $(CC) $(CFLAGS) -o $(PROG) $...
此外,`Makefile`还支持条件语句(ifeq, ifneq等)和函数(如patsubst, wildcard等),可以实现更复杂的逻辑和路径处理。例如,你可以使用`wildcard`函数获取当前目录下的所有`.c`文件,然后自动构建规则: ```make...
3. **函数**:如 `$(wildcard pattern)` 可以匹配文件模式,返回所有匹配的文件列表。 #### 六、总结 Makefile 是一个非常强大的工具,尤其适合大型项目的构建管理。通过对 Makefile 的学习和实践,可以显著提高...
其次,Makefile 中的通用函数(如 wildcard)和通配符不能在 shell 脚本中使用。在 Makefile 中,通用函数和通配符是用来匹配文件名的,而在 shell 脚本中,它们没有这种功能。 再次,shell 中所有以 $ 开头引用的...
Makefile还提供了一些内置函数,如`$(patsubst pattern,replacement,text)`用于模式替换,`$(wildcard pattern...)`用于匹配文件名等。例如: ```makefile SOURCES := $(wildcard *.c) OBJECTS := $(SOURCES:.c=.o)...
第六章“Makefile中的变量”是本手册的重点章节之一,详细介绍了变量在Makefile中的使用方法,包括变量的引用、两种类型的变量定义(递归展开式变量和直接展开式变量)、变量的高级用法(变量的替换引用和套嵌引用)...
此外,还有一系列内置函数,如$(wildcard)用于获取当前目录下的所有匹配模式的文件,$(filter-out)用于过滤出列表中的部分元素。 5. **隐含规则**:Makefile中存在许多预定义的隐含规则,例如,它知道如何编译.c...
Makefile还提供了内置函数,如`$(wildcard)`, `$(patsubst)`等,用于字符串操作和文件处理。 ### 5. 预定义规则 GNU Make预定义了一些规则,如编译C/C++文件,因此有时你无需显式写出编译命令: ```make my_...
**函数(Functions)**:Makefile还提供了许多函数,如`$(wildcard)`查找所有匹配模式的文件,`$(shell)`执行shell命令等。 通过学习和实践这个“跟我一起写Makefile”的资料,你将能熟练地编写和理解Makefile,...
总之,理解和熟练使用Makefile是每个系统级开发者必备的技能之一。通过深入学习“Makefile详解.pdf”和“GNU_Make_3.80_cn.pdf”,你可以全面了解Makefile的语法、规则和最佳实践,从而更高效地管理你的项目构建流程...
Make还提供了内置函数,如`$(patsubst)`用于字符串替换,`$(wildcard)`用于获取目录中的文件列表。 3. **规则和目标**:目标通常是需要构建的文件,如可执行文件或库。依赖项是构建目标所需的文件。当依赖文件更新...
Makefile还提供了许多内置函数,如wildcard、patsubst、notdir等,它们可以用来处理文件名匹配和转换,使得编写Makefile更为灵活和强大。 6. 清理工作 在Makefile中通常会定义一个名为clean的目标,用来清除编译...
比如`wildcard`函数用于获取符合特定模式的文件名列表,`shell`函数用于执行shell命令并捕获其输出。 在书写命令时,make允许使用`@`来隐藏命令的执行输出,使得make运行时只显示命令结果,不显示命令本身。此外,...
OBJS := $(foreach dir, $(SRCDIRS), $(wildcard $(dir)/*.o)) all: $(OBJS) $(CC) $(CFLAGS) -o main $(OBJS) clean: $(foreach dir, $(SRCDIRS), make -C $(dir) clean;) ``` 2. **子目录Makefile**: ...
Makefile支持一些函数,如`$(patsubst pattern,replacement,text)`用于替换文本模式,`$(wildcard pattern)`用于匹配目录中的文件等。 ### 6. 清理目标(Clean Target) 清理目标通常命名为`clean`,用于删除编译...
### Makefile详解 #### 一、引言 随着软件项目的规模不断扩大,手动管理源文件的编译变得愈发困难。为了提高开发效率并确保构建过程的一致性和可重复性,Makefile 应运而生。本文将详细介绍 Makefile 的概念、语法...
在多文件夹结构中编写Makefile是一项常见的任务,特别是在大型软件开发项目中。Makefile是自动化构建工具Make的配置文件,用于编译、链接、测试等步骤,提高开发效率。以下将详细介绍如何在多文件夹结构下编写有效的...
SRCS := $(wildcard src/*.c) OBJS := $(SRCS:.c=.o) ``` 2. **编译规则**:定义如何从源文件生成目标文件。这通常涉及预处理、编译和链接步骤: ```make %.o: %.c $(CC) $(CFLAGS) -c $$@ ``` 其中,`$(CC...