`
scm002
  • 浏览: 309394 次
社区版块
存档分类
最新评论

Makefile之wildcard

 
阅读更多
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之通配符探究 1、wildcard : 扩展通配符 2、notdir : 去除路径 3、patsubst :替换通配符

    gnu_makefile文档pdf html

    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...

    linux 实用makefile例子

    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)...

    Makefile基础与实战编译大型C-C++项目

    │ 7makefile函数使用wildcard自动添加目录下源码生成.o │ 8include外部文件定义统一的makefile头文件 │ 9makefile获取shell结果实现目录创建判断和根据目录生成目标名称 │ 10嵌套make同时编译和清理多项目 │ 11...

    makefile函数整理.pdf

    归纳整理makefile函数,包括 substr/patsubst/strip/findstring/filter...notdir/suffix/basename/addsuffix/addprefix/join/ wildcard/foreach/error/warning 等函数的定义,注意事项与例子 希望对编写makefile有用

    万能makefile写法详解,一步一步写一个实用的makefile

    可见,只要把这些行挪到makefile里,就能自动定义main.c的依赖是哪些文件了,做法是把命令的输出重定向到.d文件里:gcc -MM main.c > main.d,再把这个.d文件include到makefile里。 如何include当前目录每个.c生成的...

    makefile参考手册

    2.1 Makefile简介..................................................................................................................10 2.2 Makefile规则介绍..................................................

    make与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...

    GNU make中文手册

    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 ...

    免费:makefile编程

    2.1 Makefile简介.................................................................................................................. 10 2.2 Makefile规则介绍..............................................

    Gun make中文手冊

    同时重点讨论如何为一个工程编写Makefile。作为一个Linux程序员,make工具的使用以及编写Makefile是必需的 目 录 第一章:概述 1.1 概述 1.2 准备知识 第二章:GNU make 介绍 2.1 Makefile简介 2.2 Makefile...

    【推荐】GNU make中文手册

    Makefile的规则 4.1 一个例子 4.2 规则语法 4.3 依赖的类型 4.4 文件名使用通配符 4.4.1 统配符使用举例 4.4.2 通配符存在的缺陷 4.4.3 函数wildcard 4.5 目录搜寻 4.5.1 一般搜索(变量...

    GNU MAKE 中文手册

    2.1 Makefile简介 2.2 Makefile规则介绍 2.3 简单的示例 2.4 make如何工作 2.5 指定变量 2.6 自动推导规则 2.7 另类风格的makefile 2.8 清除工作目录过程文件 第三章:Makefile 总述 3.1 Makefile的内容 ...

    GNU make 中文手册 网页版

    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 内核编译过程

    简单介绍了 linux 的编译过程,makefile工程的实现

    GNU Make 使用手冊(繁體版)

    1 make概述 1.1 怎樣閱讀本手冊 1.2 問題和BUG 2 Makefile檔案介...Makefile檔案的過程 4 編寫規則 4.1規則的語法 4.2在檔案名中使用萬用字元 4.2.1萬用字元例子 4.2.2使用萬用字元的常見錯誤...

    Codestyle:质量检查工具和JBZoo编码标准的集合

    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 ...

    fingerprint

    例如,如果要启动新重映射的测试,只需键入Makefile:SRC:= $(wildcard src / .cpp) $(通配符src / remap / .cpp)\ 2 /然后在终端上进入“指纹”项目的根目录,然后执行以下命令:“ make clean; make; ./...

    oop1_2021

    2021年第4学期有用的实用程序: Makefile : CXX = g++EXEC = mainCXXFLAGS = -std=c++14 -Wall -pedanticSRC = $( wildcard * .cpp)OBJS = $( SRC:.cpp=.o )all : $( EXEC ) run$( EXEC ) : $( OBJS )$( CXX ) $^ ...

    u-terraform-website:供定制提供商使用的最小的terraform网站

    将以下行添加到提供程序的GNUMakefile / Makefile中 U_WEBSITE_REPO =github.com/jereksel/u-terraform-website u-website : ifeq (, $( wildcard $( GOPATH ) /src/ $( U_WEBSITE_REPO ) ) ) echo "$(U_WEBSITE_...

Global site tag (gtag.js) - Google Analytics