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

Gnu make在模式规则中有多个%吗?

在 Gnu make 的模式规则中,可以使用多个 % 符号。% 是通配符,表示匹配任意长度的字符串。在模式规则中,可以使用多个 % 来匹配不同的字符串。

例如,如果有一个模式规则如下:

代码语言:txt
复制
%.o: %.c
    gcc -c $< -o $@

这个规则表示将所有的 .c 文件编译成对应的 .o 文件。% 在这里表示匹配任意长度的字符串。

如果有一个文件 foo.c,那么这个规则将会被解释为:

代码语言:txt
复制
foo.o: foo.c
    gcc -c foo.c -o foo.o

同样地,如果有一个文件 bar.c,那么这个规则将会被解释为:

代码语言:txt
复制
bar.o: bar.c
    gcc -c bar.c -o bar.o

通过使用 %,可以方便地定义模式规则,减少重复的代码。在实际的开发中,可以根据需要灵活运用 % 来匹配不同的字符串,实现更加高效和灵活的构建过程。

关于 Gnu make 的更多信息和用法,可以参考腾讯云的产品介绍链接地址:Gnu make 产品介绍

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

相关·内容

【makefile】

所以Linux或Unix环境下,人们通常利用GNU make工具来自动完成应用程序的维护和编译工作。...Makefile实际上是一个文件的依赖关系,也就是说, target这一个或多个的目标文件依赖于dependency中的文件,其生成规则定义命令command中。...(3)隐含规则:由于GNU make具有自动推导功能,所以隐晦规则可以比较粗糙地简略地书写Makefile,然后由GNU make的自动推导功能完成隐晦规则的内容。...模式规则中,如果有多个目标,那么," $@ " 就是匹配于目标中模式定义的集合。 $% ——仅当目标是函数库文件中,表示规则中的目标成员名。...如果在依赖目标中有多个重复的,那个这个变量会去除重复的依赖目标,只保留一份。 $+ ——这个变量很像"$^",也是所有依赖目标的集合。只是它不去除重复的依赖目标。 命令的变量。

1.9K00

Linux makefile 教程 非常详细,且易懂

五、定义模式规则 你可以使用模式规则来定义一个隐含规则。一个模式规则就好像一个一般的规则,只是规则中,目标的定义需要有”%”字符。”%”的意思是表示一个或多个任意字符。...一旦依赖目标中的”%”模式被确定,那么,make会被要求去匹配当前目录下所有的文件名,一旦找到,make就会规则下的命令,所以,模式规则中,目标可能会是多个的,如果有模式匹配出多个目标,make就会产生所有的模式目标...下面是所有的自动化变量及其说明: @表示规则中的目标文件集。模式规则中,如果有多个目标,那么,”@”就是匹配于目标中模式定义的集合。 %仅当目标是函数库文件中,表示规则中的目标成员名。...这个特性是GNU make的,很有可能不兼容于其它版本的make,所以,你应该尽量避免使用”*”,除非是隐含规则或是静态模式中。...3、如果在模式规则列表中有匹配所有文件的模式,如”%”,那么从列表中移除其它的模式。 4、移除列表中没有命令的规则

4.2K20

Makefile经典教程(掌握这些足够)

五、定义模式规则 你可以使用模式规则来定义一个隐含规则。一个模式规则就好像一个一般的规则,只是规则中,目标的定义需要有"%"字符。"%"的意思是表示一个或多个任意字符。...一旦依赖目标中的"%"模式被确定,那么,make会被要求去匹配当前目录下所有的文件名,一旦找到,make就会规则下的命令,所以,模式规则中,目标可能会是多个的,如果有模式匹配出多个目标,make就会产生所有的模式目标...下面是所有的自动化变量及其说明: $@ 表示规则中的目标文件集。模式规则中,如果有多个目标,那么,"$@"就是匹配于目标中模式定义的集合。...这个特性是GNU make的,很有可能不兼容于其它版本的make,所以,你应该尽量避免使用"$*",除非是隐含规则或是静态模式中。...3、如果在模式规则列表中有匹配所有文件的模式,如"%",那么从列表中移除其它的模式。 4、移除列表中没有命令的规则

2.6K20

Makefile 使用总结

模式规则中,如果有多个目标,那么,"$@"就是匹配于目标中模式定义的集合。 $%     仅当目标是函数库文件中,表示规则中的目标成员名。...如果在依赖目标中有多个重复的,那个这个变量会去除重复的依赖目标,只保留一份。 $+     这个变量很像"$^",也是所有依赖目标的集合。只是它不去除重复的依赖目标。...这个特性是GNU make的,很有可能不兼容于其它版本的make,所以,你应该尽量避免使用"$*",除非是隐含规则或是静态模式中。...还得要注意的是,这些变量只使用在规则的命令中,而且一般都是"显式规则"和"静态模式规则"(参见前面"书写规则"一章)。其隐含规则中并没有意义。 1....3.5 Makefile中一些GNU约定俗成的伪目标 如果有过Linux上, 从源码安装软件的经历的话, 就会对 make clean, make install 比较熟悉.

3.5K30

全网最牛Linux内核Makefile系统文件详解(纯文字代码)

(任意的Shell命令) 这是一个文件的依赖关系,也就是说,target这一个或多个的目标文件依赖于prerequisites中的文件,其生成规则定义command中。...七、清空目标文件的规则 每个Makefile中都应该写一个清空目标文件(.o和执行文件)的规则,这不仅便于重编译,也很利于保持文件的清洁。这是一个“修养”(呵呵,还记得我的《编程修养》)。...一般来说,定义Makefile中的目标可能会有很多,但是第一条规则中的目标将被确立为最终的目标。如果第一条规则中的目标有很多个,那么,第一个目标会成为最终的目标。make 所完成的也就是这个目标。...所以,我们的“目标模式”或是“依赖模式”中都应该有“%”这个字符,如果你的文件名中有“%”那么你可以使用反斜杠“\”进行转义,来标明真实的“%”字符。...目标,以及其所引发的所有规则中(prog.o foo.o bar.o的规则),$(CFLAGS)的值都是“-g” 九、模式变量 GNUmake中,还支持模式变量(Pattern-specific Variable

3K20

Linux 下的make命令与Makefile

一个模式规则就好像一个一般的规则,只是规则中,目标的定义需要有% 字符。% 的意思是表示一个或多个任意字符。依赖目标中同样可以使用% ,只是依赖目标中的% 的取值,取决于其目标。...一旦依赖目标中的% 模式被确定,那么,make会被要求去匹配当前目录下所有的文件名,一旦找到,make就会规则下的命令,所以,模式规则中,目标可能会是多个的,如果有模式匹配出多个目标,make就会产生所有的模式目标...下面是所有的自动化变量及其说明: •@ : 表示规则中的目标文件集。模式规则中,如果有多个目标,那么,@ 就是匹配于目标中模式定义的集合。 •% : 仅当目标是函数库文件中,表示规则中的目标成员名。...如果依赖目标是以模式(即%)定义的,那么^ : 所有的依赖目标的集合。以空格分隔。如果在依赖目标中有多个重复的,那个这个变量会去除重复的依赖目标,只保留一份。...创建所有匹配于T或是N的模式规则列表 3. 如果在模式规则列表中有匹配所有文件的模式,如% ,那么从列表中移除其它的模式。 4. 移除列表中没有命令的规则。 5.

10.1K20

CMake vs Make对比

有关系?可以互换? 事实证明,它们是完全不同的。了解他们之间的区别是非常重要的,以确保您不会陷入困境。分析之前,先看看它们是什么。...我们需要“Make”的原因是因为它使最终用户能够构建和安装您的软件包,而无需了解其操作的详细信息。每个项目都有自己的规则和细微差别,每当你有一个新的合作者,它都会变得非常痛苦。...CMake解决了同样的问题,但与此同时,它具有优于GNU构建系统的一些优点: 用于编写CMakeLists.txt文件的语言是可读和易于理解的。 它不仅依靠“Make”来构建项目。...它支持多个生成器,如Xcode,Eclipse,Visual Studio等。 当将CMake与Make进行比较时,使用CMake有几个优点: 跨平台发现系统库。 自动发现和配置工具链。...如果只一个平台上只有一个小项目,那么也许“Make”可以做得更好。

3.7K31

AWStats简介

很高兴看到AWStats 6.3版本开始:中文用户基本上已经只需要将配置文件中将 LoadPlugin=”decodeutfkeys” 启用基本上就没有什么中文搜索引擎的统计问题了,目前增加了多个国内主要搜索引擎厂商...其中有很多是开放源代码的, AWStats就是其中非常优秀的一款。...的数据库(纯文本)里; 然后是输出:分两种形式 一种是通过cgi程序读取统计结果数据库输出; 一种是运行后台脚本将输出导出成静态文件; 以下是2个针对单个站点日志统计例子: 一个是GNU.../configure; make #make install 然后下载Perl库: GeoIP Perl解包后 %perl MakeFile.PL; make #make install...Geo::IPfree安装: 下载 Geo::IPfree解 包后 %perl Makefile %make #make install 配置:通过配置文件中启用

37630

跟我一起写Makefile:MakeFile介绍

(任意的shell命令) 这是一个文件的依赖关系,也就是说,target这一个或多个的目标文件依赖于prerequisites中的文件,其生成规则定义 command中。...让make自动推导 GNUmake很强大,它可以自动推导文件以及文件依赖关系后面的命令,于是我们就没必要去每一个[.o]文件后都写上类似的命令,因为,我们的make会自动识别,并自己推导命令。...清空目标文件的规则 每个Makefile中都应该写一个清空目标文件(.o和执行文件)的规则,这不仅便于重编译,也很利于保持文件的清洁。这是一个“修养”(呵呵,还记得我的《编程修养》)。...Makefile里主要包含了五个东西:显式规则、隐晦规则、变量定义、文件指示和注释。 显式规则。显式规则说明了,如何生成一个或多个目标文件。...include的语法是: include ; filename可以是当前操作系统Shell的文件模式(可以包含路径和通配符) include前面可以有一些空字符,但是绝不能是[Tab

97520

跟我一起写Makefile

(任意的shell命令) 这是一个文件的依赖关系,也就是说,target这一个或多个的目标文件依赖于prerequisites中的文件,其生成规则定义 command中。...让make自动推导 GNUmake很强大,它可以自动推导文件以及文件依赖关系后面的命令,于是我们就没必要去每一个[.o]文件后都写上类似的命令,因为,我们的make会自动识别,并自己推导命令。...清空目标文件的规则 每个Makefile中都应该写一个清空目标文件(.o和执行文件)的规则,这不仅便于重编译,也很利于保持文件的清洁。这是一个“修养”(呵呵,还记得我的《编程修养》)。...Makefile里主要包含了五个东西:显式规则、隐晦规则、变量定义、文件指示和注释。 显式规则。显式规则说明了,如何生成一个或多个目标文件。...include的语法是: include ; filename可以是当前操作系统Shell的文件模式(可以包含路径和通配符) include前面可以有一些空字符,但是绝不能是[

1K70

Makefile学习2

Makefile函数 GNU make 提供了大量的函数用来处理文件名、变量、文本和命令。通过这些函数,用户可以节省很多精力,编写出更加灵活和健壮的Makefile。...对于 GNU make内嵌的函数,直接引用就可以了;对于用户自定义的函数,要通过make的call函数来间接调用。 函数和参数列表之间要用空格隔开,多个参数之间使用逗号隔开。...,保留所有不符合此模式的单词。...:所有更新过的依赖文件 Makefile中,通配符主要用在两个场合: 用在规则的目标和依赖中:make在读取Makefile时会自动对其进行匹配处理 test: *.o gcc -o $@ $...^ *.o: *.c gcc -c $^ 用在规则的命令中:通配符的通配处理shell执行命令时完成 clean: rm -f *.o 除了以上两种情况,在其他地方都不能直接使用通配符

26510

【Linux】《how linux work》第十五章 开发工具

有时候不同目录中有几个同名的头文件,不清楚哪一个是正确的。...这个Makefile假设你同一个目录中有两个名为aux.c和main.c的C源文件。...当make以某种方式运行C预处理器时,它将将这个宏的展开作为一个参数传递。 CXXFLAGS GNU makeC++编译器标志中使用它。...注意 如果需要为对象文件定义特殊规则,请将对象文件的规则放在构建可执行文件的规则的上方。 如果多个可执行文件使用同一对象文件,则应将对象规则置于所有可执行文件规则之上。 置于所有可执行文件规则之上。...Shell脚本(第11章讨论)仍然是Unix的重要组成部分,但awk脚本领域中有些衰落。

6310

可移植的 Makefile 教程

我写 Makefile 的头 10 年里,我养成了一个非常不好的习惯 -- 完全严格使用 GNU Make 的扩展名。...过去我并不知道, GNU Make 与 POSIX 所保证的可移植特性之间的区别与联系。...make 的核心就是一个或多个依赖树(dependency tree),这些依赖树是由 规则(rule)构造而来。树中的每个节点叫做“目标(target)”。...依赖树中,指定一条或多条边的语法非常简单: target [target...]: [prerequisite...] 从技术层面来讲,虽然多个目标可以通过一个单一规则指定,但是这种做法并不常见。...默认构建多个目标是十分常见的情况。如果第一个规则选择了默认目标,我们该如何解决需要多个默认目标的问题呢?传统方式是使用伪目标(phony target).

1.3K10
领券