首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为什么GNU Make没有在'patsubst‘函数中扩展词干'%’

GNU Make没有在'patsubst'函数中扩展词干'%'的原因是因为这个功能不是GNU Make的设计目标。'patsubst'函数是用于模式替换的,它可以将一个字符串中的模式匹配部分替换为指定的字符串。但是,'%'在'patsubst'函数中并不表示一个通配符或模式,而是一个特殊字符,用于表示目标和依赖文件的通配符。

在GNU Make中,'%'通常用于表示模式规则中的通配符,它可以匹配任意长度的字符串。在模式规则中,'%'表示一个模式,可以匹配目标和依赖文件中相同位置的任意字符串。这样可以方便地定义一条规则来处理多个类似的文件。

然而,在'patsubst'函数中,'%'并不具有这样的功能。'patsubst'函数的语法是将一个字符串中的模式匹配部分替换为指定的字符串。它的参数是一个模式和一个替换字符串,它会在给定的字符串中查找模式匹配的部分,并将其替换为指定的字符串。

因此,'patsubst'函数并不需要扩展词干'%'的功能,也没有提供这样的功能。如果需要在GNU Make中实现类似的功能,可以考虑使用其他函数或自定义规则来实现。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Makefile学习2

如果变量的值非空(Makefile没有定义的变量的值为空),表达式为真。...ifndef 关键字 ifndef关键字和ifdef相反,如果一个变量没有定义,表达式为真。 Makefile函数 GNU make 提供了大量的函数用来处理文件名、变量、文本和命令。...对于 GNU make内嵌的函数,直接引用就可以了;对于用户自定义的函数,要通过make的call函数来间接调用。 函数和参数列表之间要用空格隔开,多个参数之间使用逗号隔开。...GNU make提供了一系列文本处理函数:subst、patsubst、strip、findstring、filter、filer-out、sort、word、wordlist、words、fistword...:所有更新过的依赖文件 Makefile,通配符主要用在两个场合: 用在规则的目标和依赖make在读取Makefile时会自动对其进行匹配处理 test: *.o gcc -o $@ $

29310

Makefile总结

Makefile是一个规定了怎么去编译和链接程序的脚本文件,执行make命令时会执行该文件,window环境下的IDE,如visual studio已经集成了该功能,不需要关心程序的编译规则,linux...目前centos 7.3 GNUmake版本是3.82 为什么要用Makefile 在做C/C++开发过程,比如有如下文件: a.c b.c main.c 编译生成可执行二进制文件 gcc a.c...函数可以使得Makefile文件写起来更加简洁,如对于上百个文件,一个个手敲出*.cpp也很麻烦,Makefile提供了wilcard和patsubst函数。...:wildcard 获取当前目录下所有.cpp文件:SRC = $(wildcard *.cpp) 函数3:patsubst 获取当前目录下所有.cpp文件编译后的所有目标文件.o:OBJ = $(patsubst...并没有执行删除操作。 这种情况可以使用伪目标来解决,可避免makefile定义的执行命令目标和当前目录下实际文件名冲突。 一旦定义为伪目标,make执行规则不会去查找隐含规则,同样也提高了效率。

93110

Makefile从入门到上手

,几乎所有的 Linux 发行版都内置了 GNU-Make 软件,VScode 等多种 IDE 也内置了 Make 程序。...目标就是指要干什么,或说运行 make 后生成什么,而依赖是告诉 make 如何去做以实现目标。 Makefile ,目标和依赖是通过规则(rule)来表达的。...执行 make 由于没有文件变动, a.out 的时间戳晚于所有依赖文件,这里 make 就没干活 于是,执行时加新指令,先模拟执行 clean 部分: 确定没有问题,执行 3...$^ # 规则的命令,表示所有依赖条件。组成一个列表,以空格隔开,如果这个列表中有重复项,则去重 $ 参数是一个临时的局部变量,foreach函数执行完后,参数 的变量将不在作用,其作用域只 foreach 函数当中。

34430

makefile终极奥义

:只对add.c进行了编译,省略了没有必要的编译步骤 为什么会这样?...你可以在你的makefile改变这些变量的值,或是make的命令行传入这些值,或是在你的环境变量设置这些值 命令的变量 变量 默认命令 意义 AR 默认命令是 ar 函数库打包程序。...匹配一个字符 * 所有 GNUmake很强大,它可以自动推导文件以及文件依赖关系后面的命令 例如: 只要make看到一个 .o 文件,它就会自动的把 .c 文件加在依赖关系,如果make找到一个...函数 Makefile可以使用函数来处理变量,从而让我们的命令或是规则更为的灵活和具有智能。...Makefile我们要定义一系列的变量,变量一般都是字符串,这个有点像你C语言中的宏,当Makefile被执行时,其中的变量都会被扩展到相应的引用位置上。 函数

1.3K30

探索Linux内核:Kconfig的秘密

一些目标有一个GUI(为了用户的方便),而大多数没有。与kconfig相关的工具和源代码主要位于scripts/kconfig/在内核源代码。...最后,将配置数据库转储到.config文件。 但是.config文件不是内核构建的最终素材;这就是为什么syncconfig目标存在。...空头文件include/config/用于kbuild期间进行配置依赖项跟踪,下面将对此进行解释。 配置之后,我们将知道哪些文件和代码段没有编译。...KBuild 组件式建筑,称为递归制作,是GNU的一种常见方式。制作,使管理一个大型项目。KBuild是递归make的一个很好的例子。...$(vmlinux-dirs): $(Q)$(MAKE) $(build)=$@ need-builtin=1 递归的配方扩展,例如: make -f scripts/Makefile.build

1.7K11

Makefile教程

Makefile我们要定义一系列的变量,变量一般都是字符串,这个有点你C语言中的宏,当Makefile被执行时,其中的变量都会被扩展到相应的引用位置上。 4.文件指示。...(2)wildcard、notdir、patsubst均是Makefile内置函数,各含义如下: wildcard:扩展通配符; notdir:去除路径; patsubst:替换通配符。...尤其是Makefile,当变量定义或者函数调用时,通配符%的展开功能就失效了。此时需要借助wildcard函数。通配符*常用于wildcard函数,二者应用范围不同。...: $(CC) $(INCLUDE) $(CFLAGS) -c $< 一眼望去,为什么目Makefile目标文件没有依赖项。...8.小结 实际上,Makefile还有很多基础知识点和复杂的特性并未在文中赘述,比如各种函数的用法、嵌套执行make、双后缀规则、定义命令包等,这些需要我们实际使用过程中去熟悉掌握。

3.9K53

makefile的include的作用(makefile的变量)

1、wildcard : 扩展通配符 2、notdir : 去除路径 3、patsubst :替换通配符 例子: 建立一个测试目录,测试目录下建立一个名为sub的子目录 $...它的标准格式是 $(var:a=b) 或 ${var:a=b} 它的含义是把变量var的每一个值结尾用b替换掉a 今天研究makefile时在网上看到一篇文章,介绍了使用函数...PS:针对patsubst我们来好好聊一聊 这是个模式替换函数 格式:$(patsubst ,, ) 名称:模式字符串替换函数——patsubst...示例: $(patsubst %.c,%.o,x.c.c bar.c) 把字串“x.c.c bar.c”符合模式[%.c]的单词替换成[%.o],返回结果是“x.c.o bar.o” make中有个变量替换引用.../myfile 起初使用的是变量替换引用的方式,但是却始终不生成中间的.o文件,但是使用patsubst后,一切正常了,如果你知道为什么,请留言告诉我吧 发布者:全栈程序员栈长,转载请注明出处:https

3.1K50

快速上手和使用makefile

make是一个命令工具,是一个解释makefile中指令的命令工具,一般来说,大多数的IDE都有这个命令,比如:Delphi的make,Visual C++的nmake,Linux下GNUmake。...对于后者,通常是你需要告诉编译器头文件的所在位置(头文件应该只是声明,而定义应该放在C/C++文件),只要所有的语法正确,编译器就可以编译出中间目标文件。...链接器并不管函数所在的源文件,只管函数的中间目标文件(Object File),大多数时候,由于源文件太多,编译生成的中间目标文件太多,而在链接时需要明显地指出中间目标文件名,这对于编译很不方便,所以...而在链接程序时,链接器会在所有的Object File找寻函数的实现,如果找不到,那到就会报链接错误码(Linker Error),VC下,这种错误一般是:Link 2001错误,意思说是说,链接器未能找到函数的实现...%.c,%.o,(SRCS)) all: (OBJS) %.o : %.c{CC} -c {CFLAGS} {INCS} -o @ (wildcard *.c) # 调用patsubst函数

1.4K20

make wildcard_其古文中的用法

Makefile规则,通配符会被自动展开。但在变量的定义和函数引用时,通配符将失效。...Makefile,它被展开为已经存在的、使用空格分开的、匹配此模式的所有文件列表。如果不存在任何符合此模式的文件,函数会忽略模式字符并返回空。...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...它的标准格式是(var:a=b) 或 {var:a=b}它的含义是把变量var的每一个值结尾用b替换掉a 今天研究makefile时在网上看到一篇文章,介绍了使用函数wildcard得到指定目录下所有的

53110

操作系统(5)实验0——makefile的写法

前提与假设 这里假设使用的makeGNUmake(不同厂商的make对应的makefile写法不一样,make可以理解为根据makefile来编译链接程序的工具)。...而makefile恰好就有这个功能,你只需要将这个指令直接输入到makefile直接用到的时候直接使用指令make,工具make就会直接帮你运行makefile的这个命令。...当直接使用指令make并且没有提供任何参数的时候,make就会直接执行第一条规则,因为我们这里只有一条,所以使用指令make就会直接执行我们想要让他执行的编译指令了。...既然提到了规则,那么就介绍下makefile的规则写法: 规则,如果是第一次执行规则或者执行规则对应的prerequisites的文件被更新了,那么执行规则的时候才会运行规则对应的command...LIBS用来引入其他的库(通常安装在系统,这里可以直接引用),例如这里用了-lm来引用数学的库。patsubst用来替换通配符,即变量的%,最终会被替换成具体的文件名。

1.7K20

手把手教你写一个 Makefile 文件

make 是一个命令工具,是一个解释Makefile中指令的命令工具,一般来说,大多数的IDE都有这个命令,比如:Linux下GNUmake、Visual C++的nmake、Delphi的make。...链接程序时,链接器会在所有的Object File找寻函数的实现,如果找不到,那就会报链接错误码(Linker Error),VC下,这种错误一般是:Link 2001错误,意思是说,链接器未能找到函数的实现...如果执行make出现如下信息,那就是命令行(makefile的gcc或者rm)前面没有用tab键缩进,不能用空格: b....如果执行make出现如下信息,那就是你的代码没有修改过,Makefile拒绝你的请求: 这里还会有一种情况就是如果只修改过其中一个文件,那么重新编译就可以看到只编译修改的那个文件,没有编译其他未修改的文件...格式:$(函数名 实参列表) # 函数1 $(wildcard *.c) # 表示当前路径下的所有的 .c # 函数2 $(patsubst %.c, %.o, 所有的.c文件) #

1.5K10
领券