在Makefile规则中,通配符会被自动展开。但在变量的定义和函数引用时,通配符将失效。...在Makefile中,它被展开为已经存在的、使用空格分开的、匹配此模式的所有文件列表。如果不存在任何符合此模式的文件,函数会忽略模式字符并返回空。...需要注意的是:这种情况下规则中通配符的展开和上一小节匹配通配符的区别。 一般我们可以使用“(wildcard *.c)”来获取工作目录下的所有的.c文件列表。...1、wildcard : 扩展通配符 2、notdir : 去除路径 3、patsubst :替换通配符 例子:建立一个测试目录,在测试目录下建立一个名为sub的子目录 mkdir test cd test...第二行输出: a.c b.c sa.c sb.c notdir把展开的文件去除掉路径信息 第三行输出: a.o b.o sa.o sb.o 在(patsubst %.c,%.o,(dir) )中,patsubst
1、wildcard : 扩展通配符 2、notdir : 去除路径 3、patsubst :替换通配符 例子: 建立一个测试目录,在测试目录下建立一个名为sub的子目录 $.../sub/*.c) dir=$(notdir $(src)) obj=$(patsubst %.c,%.o,$(dir) ) all: @echo $(src) @echo...或者可以使用 obj=$(dir:%.c=%.o) 效果也是一样的。 这里用到makefile里的替换引用规则,即用您指定的变量替换另一个变量。...它的标准格式是 $(var:a=b) 或 ${var:a=b} 它的含义是把变量var中的每一个值结尾用b替换掉a 今天在研究makefile时在网上看到一篇文章,介绍了使用函数...对于一个已经定义的变量,可以使用“替换引用”将其值中的后缀字符(串)使用指定的字符(字符串)替换。
多文件目录Makefile写法 1、前言 linux下程序开发,涉及到多个文件,多个目录,这时候编译文件的任务量比较大,需要写Makefile 2、简单测试 测试程序在同一个文件中,共有func.h.../bin 5 6 SRC = $(wildcard ${DIR_SRC}/*.c) 7 OBJ = $(patsubst %.c,${DIR_OBJ}/%.o,$(notdir ${SRC}...中的 符号 @, ^, < 的意思: ^ 表示所有的依赖文件 < 表示第一个依赖文件 (2)wildcard、notdir、patsubst的意思: wildcard : 扩展通配符 ...notdir : 去除路径 patsubst :替换通配符 例如下图例子所示: ?...blog.csdn.net/haoel/article/details/2886/ 最后一行应为 find ${DIR_OBJ} -name *.o -exec rm -rf {} \ ; 少了一个反斜杠和;
在Linux中编译代码,不像是Windows中有很多集成的IDE,Linux中都是通过基本的编译工具如gcc来进行,比如要编译main.c这个文件,可以使用gcc main.c -o main.但是如果源文件很多...,这种方法就不适用了,所以,必须要学会使用Makefile。...(3)自动化变量 $< 第一个依赖文件 $^ 全部的依赖文件 $@ 目标 使用自动化变量可以使Makefile文件更好地修改,类似于C语言中使用宏定义来封装,比如将前面写的Makefile进行改造 cc...%.c,%.o,x.c.c bar.c)" 当调用patsubst函数的时候,会去将后面的x.c.c、bar.c和前面的%.c匹配,匹配成功则变成.o文件 (2)取文件名函数-notdir echo...我们把main.c和mp3.c分别放在不同的文件夹module1和module2里,体现实际工程中的模块思想,然后建一个include文件夹用来存放头文件。
与去除目录函数notdir获取目标文件列表 OBJ = $(patsubst %.cpp,${DIR_OBJ}/%.o,$(notdir ${SRC})) TARGET = main.out BIN_TARGET...(2)wildcard、notdir、patsubst均是Makefile内置函数,各含义如下: wildcard:扩展通配符; notdir:去除路径; patsubst:替换通配符。...(4)Makefile中对一些简单变量的引用,可以不使用”()”和”{}”来标记变量名,而直接使用$x的格式来实现,此种用法仅限于变量名为单字符的情况。另外自动化变量也使用这种格式。...中通配符*与%的区别是什么?...通配符*则不具备上述功能。尤其是在Makefile中,当变量定义或者函数调用时,通配符%的展开功能就失效了。此时需要借助wildcard函数。通配符*常用于wildcard函数中,二者应用范围不同。
基于这个目的,Makefile诞生了。 对于上面的编译命令,有两个编译选项,-c和-o。上面的代码也可以拆开写: gcc -c hello.c #把.c生成.o。...我们以上面的工程和makefile为例进行说明。...# 伪目标的意义就是,无论如何都执行下面的命令 clean: rm -f hello $(OBJS) 上面的makefile中需要掌握的语法是: patsubst 模式匹配文本并替换...wildcard 列举符合通配符表达式的所有源文件,输出以空格为分隔符的列表。...使用上没有任何问题,但是,我们发现上面的.o目标文件遵循就近原则,散落在各个目录下。
notdir,wildcard和patsubst是makefile中几个有用的函数,以前没留意过makefile中函数的用法,今天稍微看看~ 1、makefile里的函数 makefile里的函数使用...,和取变量的值类似,是以一个‘$’开始,然后是一个括号里面是函数名和需要的参数列表,多个变量用逗号隔开,像这样 return = $(functionname arg1,arg2,arg3…)。...3、notdir 使用:SRC = $(notdir wildcard) 去除所有的目录信息,SRC里的文件名列表将只有文件名。...4、patsubst 使用:OBJ = (patsubst %.o %.c (SRC)) patsubst是patten substitude的缩写,匹配替代的意思。... # 你可以隨便更改和散發這個文件 # 而不需要給原作者什榮譽。 # (你好意思?)
最近在编写Android编译系统时,需要遍历每一个目录下每一个文件夹下的makefile,网上的方法有些繁琐 ;就直接贴上自己遍历子目录深度为1;(for temporary)(之后会继续更新) 下面是我的一个简单实例工程...1、根目录(相对于项目而言)的makefile 1 #获取当前目录下的子目录名字 2 subdir = $(shell ls -l | grep ^d | awk '{print $$9}') 3...BIN_DIR)/main 12 13 14 CFLAGS := -g 15 CFLAGS += -Wall 16 CFLAGS += -D_FORTIFY_SOURCE=2 17 18 19 #patsubst...是替换通配符,会把第一个%.c替换成第二个参数的%.c, 20 #wildcard 是把指定目录 $(SRC_DIR)下面的.c文件全部展开 21 #notdir 是把展开的文件去掉路径信息 22 SOURCES...:= $(patsubst %.c,%.c,$(notdir $(wildcard $(SRC_DIR)/*.c))) \ 23 24 OBJECTS := $(addprefix $(OBJ_DIR
notdir 把展开的文件的路径去掉,只显示文件名而不包含其路径信息,例如: FILES =(notdir (SOURCES)) 这行的作用是把上面以 .c 结尾的文件的文件列表中附带的路径去掉,只显示符合条件的文件名...patsubst ( patten substitude, 匹配替换的缩写)函数。它需要3个参数:第一个是一个需要匹配的式样,第二个表示用什么来替换它,第三个是一个需要被处理的由空格分隔的字列。...参考文献 Makefile中foreach函数使用方法:https://blog.csdn.net/yanlaifan/article/details/71402771 Makefile中wildcard...、notdir、patsubst函数的用法:https://blog.csdn.net/zqj6893/article/details/9066225 Makefile中的wildcard用法:Makefile...: Frytea Title: Makefile中部分函数的使用 Link: https://blog.frytea.com/archives/466/ Copyright: This work
假定我们的源文件放在src目录,头文件放在inc目录,.o文件放在obj目录,.d文件放在dmk目录,Makefile和上述4个目录为同一级别。...(D_MK)/, $(patsubst %.c,%.d,$(notdir $(SRC_C)))) notdir表示去除目录,则(notdir (SRC_C))表示a.c b.c patsubst表示把(...notdir (SRC_C))中的.c替换成.o,即a.o b.o addprefix表示增加前缀$(D_OBJ)/,则OBJ_C变量表示为obj/a.o obj/b.o 4.明白了上述语句之后我们可以把...makefile写成如下状态 D_SRC = src D_INC = -I....%.c,%.o,$(notdir $(SRC_C)))) SRC_MK = $(addprefix $(D_MK)/, $(patsubst %.c,%.d,$(notdir $(SRC_C))))
在Makefile中可以使用函数来处理文本,从而让我们的命令或是规则更为灵活和智能。make所支持的函数也不算很多,不过已经足够我们的操作了。函数调用后,函数的返回值可以当做变量来使用。...,函数中的参数可以使用变量。...为了统一风格,建议函数和变量统一使用花括号,如使用$(subst a,b,$(x))这样的形式,而不是$(subst a,b,${x})的形式。...2.2 patsubst 原型: $(patsubst ,,) 功能:查找中以空白符(空格、Tab)分隔的单词是否符合模式<pattern...3.2 notdir 原型: $(notdir ) 功能:从多个以空白符分隔的文件列表中获取非目录部分。非目录部分是指最后一个反斜杠/之后的内容。
clean: 清理规则,执行 make clean 时将删除生成的可执行文件和中间目标文件。 3. 使用 Makefile 在项目目录中,执行以下命令: 构建项目: make 或 make all。...变量引用: 使用 @ 表示目标,^ 表示所有依赖文件, 通配符: 使用 % 通配符来表示一类文件,例如 %.o: %.c。 Makefile 是一个非常强大的工具,可以用于管理复杂的项目结构。...变量 在 Makefile 中,可以使用变量来存储和引用值。在上述例子中,CC 和 CFLAGS 就是变量,分别存储编译器和编译选项。 13....在上述例子中,默认规则是 all: target1 target2。 15. 通配符 Makefile 支持通配符,用于匹配文件列表。常用的通配符包括 *(匹配任意字符)和 %(匹配任意字符序列)。...条件语句 Makefile 中可以使用条件语句,根据不同的条件执行不同的指令。
本文使用nvcc版本:Cuda compilation tools, release 5.5, V5.5.0 ---- 1.nvcc支持OpenMP 书写makefile时,使用-fopenmp命令选项时会报...正确的编译选项是: -Xcompiler -fopenmp 2.nvcc指定GPU计算能力 在内核中调用原子函数(例如atomicAdd)时,如果编译的时候出现”error: identifier “atomicAdd.../obj NOTDIR_CXXFILES=$(notdir ${CXXFILES}) NOTDIR_CUFILES=$(notdir ${CUFILES}) OBJS=$(addprefix ..../obj/,$(patsubst %.cpp,%.o,${NOTDIR_CXXFILES})) OBJS+=$(addprefix ..../obj/,$(patsubst %.cu,%.o,${NOTDIR_CUFILES})) #compile DICUALG.out:${OBJS} $(MAKE) -C .
编写Makefile是一个苦乐交织的事情,快乐是因为从一堆需要手工逐个处理的编译过程,进步到一条命令完成,看着代码顺畅的在屏幕上滚动,编译为最终的产品,那个过程无比愉悦;而痛苦则是,写代码已经很累了,写完代码还要编写...Makefile,这多出来的一点工作,很有点最后一根稻草的感觉。...最近整理手头的几个项目,把C语言类的Makefile抽象、合并了一下,形成了一个比较通用的编译脚本,这里分享一下: #定义编译器 CC=gcc #自己特定的编译参数,这里仅为示例,这个参数是消除mac编译...$(wildcard src/*.c)) OBJS = $(patsubst %.c,%.o,$(OBJSSOURCE)) #主程序名 KEYS = main DEPS = $(addprefix...脚本简单修改可以适应各种环境,比如下面再贴一个ios使用的,ios如果非越狱的话,直接编译成可执行文件是没有意义的,这里我们假设编译成.a库文件,供xcode来调用: #ios交叉编译器 CC=$(shell
pattern’和`replacement’中可以使用通配符。...pattern和replacement 中可以使用通配符。 比如: $(patsubst %.c,%.o,x.c.c bar.c) 结果为:x.c.o bar.o。...(2)$(notdir names…) 抽取names...中每一个文件名中除路径部分外一切字符(真正的文件名)。...(7)$(wildcard pattern) 参数pattern是一个文件名格式,包含有通配符(通配符和 shell 中的用法一样)。...‘%’是通配符,它和一个字符串中任意个数的字符相匹配。
makefile文件用于管理和组织代码工程的编译和链接,其不是可执行文件,其被make工具解析并完成相关动作,下面笔者将介绍makefile中常用的一些语法说明: 1、文件包含: 语法:include...通常我们将一些配置选项分开成一个独立的makefile文件,这样有利于makefile文件的管理,或将模块代码的依赖关系和需要编译的文件信息独自写到一个 makefile文件中,最终通过include命令形成一个顶层...makefile文件来完成整个工程代码的编译和链接。...c和test2.c添加到C_SRCS中,其代码如下所示: C_SRCS := C_SRCS += test1.c test2.c 在makefile中有一类特殊的变量,其名称为 自动变量,自动变量的值会依据规则中的...$< 为规则中第一个prerequisite名称 3、内置命令: Makefile中内置了一些常用的命令,有字符串处理函数subst、patsubst、strip、findstring、filter、filter-out
/configure生成config.h configure.h使用autoconf和automake命令的shell脚本,可以通过autoscan自动生成或手写 acconfig.h包含了configure.in...中未定义的宏 autoscan–>autoheader–>aclocal–>automake|autoconf ?...$(notdir )取文件名部分 $(suffix )取后缀扩展名 $(basename )取文件名前部分 ----------------...usr/bin下 (卸载使用make uninstall,清理make产生的缓存文件使用make clean) ####4.软件包管理工具 linux分为桌面系统领域和服务器系统领域,服务器系统如...:rethat、suse、gentoo、arch、fedora、国产中标麒麟;桌面系统如:centos、ubuntu linux软件包分为两大阵营:RPM和DPKG,与bin安装和源码安装相比,管理包工具使用数据库方式管理软件包和包的依赖项
今天对之前写的 Linux C/C++工程中可生成ELF、动/静态库文件的通用Makefile - TypeCodes 文章里面的 Makefile 进行了优化,增加了在当前目录生成单个可执行文件的功能...如上图所示,我的一个 myRedisSentinel 目录中包含了多个 cpp 文件,然后只要在 SINGLE_BIN 里面配置想要输出的可执行文件名称,最后执行 make -j4 命令即可生成。...2 附录:Makefile 文件源码 已将下面的 Makefile 源文件托管到 github仓库中: 1、GitHub: https://github.com/vfhky/General_Makefile...$(CURDIR)/%.o: $(CURDIR)/%.c @$(call gen_depend,$(patsubst %.o,%.d,$@),$<,$@,$(CC)) $(CC) $(CFLAGS...) -o $@ -c $< $(CURDIR)/%.o: $(CURDIR)/%.cpp @$(call gen_depend,$(patsubst %.o,%.d,$@),$<,$@,$(CXX
领取专属 10元无门槛券
手把手带您无忧上云