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之通配符探究 1、wildcard : 扩展通配符 2、notdir : 去除路径 3、patsubst :替换通配符
4.2.3函数wildcard 4.3在目录中搜寻依赖 4.3.1VPATH:所有依赖的搜寻路径 4.3.2vpath指令 4.3.3目录搜寻过程 4.3.4编写搜寻目录的shell命令 4.3.5目录搜寻和隐含规则 4.3.6连接库的搜寻目录 4.4假想目标 4.5...
SOURCE := $(wildcard *.c) $(wildcard *.cpp) OBJS := $(patsubst %.c, %.o, $(patsubst %.cpp, %.o, $(SOURCE))) DEPS := $(patsubst %.o,%.d,$(OBJS)) #######rule .SUFFIXES: .cpp .c .o .so .a .d $(OBJSPATH)...
│ 7makefile函数使用wildcard自动添加目录下源码生成.o │ 8include外部文件定义统一的makefile头文件 │ 9makefile获取shell结果实现目录创建判断和根据目录生成目标名称 │ 10嵌套make同时编译和清理多项目 │ 11...
归纳整理makefile函数,包括 substr/patsubst/strip/findstring/filter...notdir/suffix/basename/addsuffix/addprefix/join/ wildcard/foreach/error/warning 等函数的定义,注意事项与例子 希望对编写makefile有用
可见,只要把这些行挪到makefile里,就能自动定义main.c的依赖是哪些文件了,做法是把命令的输出重定向到.d文件里:gcc -MM main.c > main.d,再把这个.d文件include到makefile里。 如何include当前目录每个.c生成的...
2.1 Makefile简介..................................................................................................................10 2.2 Makefile规则介绍..................................................
3.3.2.wildcard函数 11 3.4.目录搜索 11 3.4.1.‘VPATH’ 11 3.4.2.选择性搜索 12 3.4.3.使用自动变量 12 3.4.4.目录搜索和隐含规则 13 3.5.PHONY目标 13 3.6.FORCE目标 14 3.7.空目标 14 3.8.内建的特殊目标 14 3.9...
2.1 Makefile简介 2.2 Makefile规则介绍 2.3 简单的示例 2.4 make如何工作 2.5 指定变量 2.6 自动推导规则 2.7 另类风格的makefile 2.8 清除工作目录过程文件 第三章:Makefile 总述 3.1 Makefile的内容 3.2 ...
2.1 Makefile简介.................................................................................................................. 10 2.2 Makefile规则介绍..............................................
同时重点讨论如何为一个工程编写Makefile。作为一个Linux程序员,make工具的使用以及编写Makefile是必需的 目 录 第一章:概述 1.1 概述 1.2 准备知识 第二章:GNU make 介绍 2.1 Makefile简介 2.2 Makefile...
Makefile的规则 4.1 一个例子 4.2 规则语法 4.3 依赖的类型 4.4 文件名使用通配符 4.4.1 统配符使用举例 4.4.2 通配符存在的缺陷 4.4.3 函数wildcard 4.5 目录搜寻 4.5.1 一般搜索(变量...
2.1 Makefile简介 2.2 Makefile规则介绍 2.3 简单的示例 2.4 make如何工作 2.5 指定变量 2.6 自动推导规则 2.7 另类风格的makefile 2.8 清除工作目录过程文件 第三章:Makefile 总述 3.1 Makefile的内容 ...
2.1 Makefile简介 2.2 Makefile规则介绍 2.3 简单的示例 2.4 make如何工作 2.5 指定变量 2.6 自动推导规则 2.7 另类风格的makefile 2.8 清除工作目录过程文件 第三章:Makefile 总述 3.1 Makefile的内容 ...
简单介绍了 linux 的编译过程,makefile工程的实现
1 make概述 1.1 怎樣閱讀本手冊 1.2 問題和BUG 2 Makefile檔案介...Makefile檔案的過程 4 編寫規則 4.1規則的語法 4.2在檔案名中使用萬用字元 4.2.1萬用字元例子 4.2.2使用萬用字元的常見錯誤...
ifneq (, $( wildcard ./vendor/jbzoo/codestyle/src/init.Makefile) ) include ./vendor/jbzoo/codestyle/src/init.Makefile endif update : # #@Project Install/Update all 3rd party dependencies $(call ...
例如,如果要启动新重映射的测试,只需键入Makefile:SRC:= $(wildcard src / .cpp) $(通配符src / remap / .cpp)\ 2 /然后在终端上进入“指纹”项目的根目录,然后执行以下命令:“ make clean; make; ./...
2021年第4学期有用的实用程序: Makefile : CXX = g++EXEC = mainCXXFLAGS = -std=c++14 -Wall -pedanticSRC = $( wildcard * .cpp)OBJS = $( SRC:.cpp=.o )all : $( EXEC ) run$( EXEC ) : $( OBJS )$( CXX ) $^ ...
将以下行添加到提供程序的GNUMakefile / Makefile中 U_WEBSITE_REPO =github.com/jereksel/u-terraform-website u-website : ifeq (, $( wildcard $( GOPATH ) /src/ $( U_WEBSITE_REPO ) ) ) echo "$(U_WEBSITE_...