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

Makefile模式规则和通配符-如何将两个参数从目标传递到配方

Makefile是一种用于自动化构建和管理软件项目的工具。它使用一种名为Makefile的文件来定义构建规则和依赖关系。在Makefile中,可以使用模式规则和通配符来实现更灵活的构建过程。

模式规则是一种通用的规则,可以根据文件名的模式匹配来生成目标文件。通配符是一种用于匹配文件名的特殊字符,例如*表示匹配任意字符,?表示匹配单个字符。

要将两个参数从目标传递到配方,可以使用特殊的变量$@$<。其中,$@表示目标文件名,$<表示第一个依赖文件名。

下面是一个示例的Makefile模式规则和通配符的用法:

代码语言:txt
复制
# 定义目标和依赖关系
target: dependency1 dependency2
    # 配方中使用$@表示目标文件名,$<表示第一个依赖文件名
    command $@ $<

# 使用模式规则和通配符
%.o: %.c
    # 配方中使用$@表示目标文件名,$<表示第一个依赖文件名
    command $@ $<

在上面的示例中,target是一个目标,它依赖于dependency1dependency2。在配方中,可以使用$@$<来引用目标和依赖文件名,并执行相应的命令。

对于Makefile中的模式规则和通配符,可以根据具体的需求进行灵活运用。它们可以帮助开发人员更方便地管理和构建项目。

腾讯云相关产品和产品介绍链接地址:

  • 腾讯云产品:https://cloud.tencent.com/product
  • 腾讯云云原生服务:https://cloud.tencent.com/solution/cloud-native
  • 腾讯云数据库服务:https://cloud.tencent.com/product/cdb
  • 腾讯云服务器运维:https://cloud.tencent.com/product/cvm
  • 腾讯云音视频服务:https://cloud.tencent.com/product/tcav
  • 腾讯云人工智能服务:https://cloud.tencent.com/product/ai
  • 腾讯云物联网服务:https://cloud.tencent.com/product/iotexplorer
  • 腾讯云移动开发服务:https://cloud.tencent.com/product/mobdev
  • 腾讯云存储服务:https://cloud.tencent.com/product/cos
  • 腾讯云区块链服务:https://cloud.tencent.com/product/baas
  • 腾讯云元宇宙服务:https://cloud.tencent.com/product/mu
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Makefile学习2

Makefile学习2 Makefile条件判断 使用条件判断,可以让make在编译程序时,根据不同的情况,执行不同的分支:可以执行不同的命令,使用不同的编译参数,生成不同的目标。...ifeq后面的比较语句使用小括号抱起来,ifeq小括号之间要用空格隔开,小括号里的两个参数用逗号隔开。当小括号里的条件满足时,make就会执行这个分支的命令,否则执行else部分。...给函数传递参数在函数中使用 (0)、 (1)引用。 用户自定义函数使用call函数间接调用,各个参数之间使用空格隔开。...匹配任意一个字符 [] 我们可以指定匹配的字符放在 “[]” 中 除此之外,Makefile还有经常使用的几个自动变量也可以看做特殊通配符: $@:所有目标文件 $^:目标依赖的所有文件 $<:第一个依赖文件...:所有更新过的依赖文件 在Makefile中,通配符主要用在两个场合: 用在规则目标依赖中:make在读取Makefile时会自动对其进行匹配处理 test: *.o gcc -o $@ $

29710

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

需要注意的是,有两个变量,一个是SHELL,一个是MAKEFLAGS,这两个变量不管你是否export,其总是要传递下层Makefile中,特别是MAKEFILES变量,其中包含了make的参数信息,...如果我们执行“总控Makefile”时有make参数或是在上层Makefile中定义了这个变量,那么MAKEFILES变量将会是这些参数,并会传递下层Makefile中,这是一个系统级的环境变量。...但是make命令中的有几个参数并不往下传递,它们是“-C”,“-f”,“-h”“-o”“-W”(有关Makefile参数的细节将在后面说明),如果你不想往下层传递参数,那么,你可以这样来: subsystem...当make嵌套调用时(参见前面的“嵌套调用”章节),上层Makefile中定义的变量会以系统环境变量的方式传递下层的Makefile中。当然,默认情况下,只有通过命令行设置的变量会被传递。...功能:字符串中取开始的单词串。是一个数字。 返回:返回字符串中的单词字串。

4.3K20

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

如果你要传递变量到下级Makefile中,那么你可以使用这样的声明: export 如果你不想让某些变量传递下级Makefile中,那么你可以这样声明: unexport...需要注意的是,有两个变量,一个是SHELL,一个是MAKEFLAGS,这两个变量不管你是否export,其总是要传递下层Makefile中,特别是MAKEFILES变量,其中包含了make 的参数信息...,如果我们执行“总控Makefile”时有make参数或是在上层Makefile中定义了这个变量,那么MAKEFILES变量将会是这些参数,并会传递下层Makefile中,这是一个系统级的环境变量。...但是make命令中的有几个参数并不往下传递,它们是“-C”,“-f”,“-h”“-o”“-W”(有关Makefile参数的细节将在后面说明),如果你不想往下层传递参数,那么,你可以这样来: subsystem...当make嵌套调用时(参见前面的“嵌套调用”章节),上层Makefile中定义的变量会以系统环境变量的方式传递下层的Makefile中。当然,默认情况下,只有通过命令行设置的变量会被传递

3.1K20

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

需要注意的是,有两个变量,一个是SHELL,一个是MAKEFLAGS,这两个变量不管你是否export,其总是要传递下层Makefile中,特别是MAKEFILES变量,其中包含了make的参数信息,...如果我们执行“总控Makefile”时有make参数或是在上层Makefile中定义了这个变量,那么MAKEFILES变量将会是这些参数,并会传递下层Makefile中,这是一个系统级的环境变量。...但是make命令中的有几个参数并不往下传递,它们是“-C”,“-f”,“-h”“-o”“-W”(有关Makefile参数的细节将在后面说明),如果你不想往下层传递参数,那么,你可以这样来:    subsystem...当make嵌套调用时(参见前面的“嵌套调用”章节),上层Makefile中定义的变量会以系统环境变量的方式传递下层的Makefile中。当然,默认情况下,只有通过命令行设置的变量会被传递。...功能:字符串中取开始的单词串。是一个数字。 返回:返回字符串中的单词字串。

2.6K20

Linux中Makefile文件详解

$(OBJS): 中间文件的生成规则,告诉 Make 如何生成中间目标文件。 %.o: %.c: 通用规则,告诉 Make 如何将 .c 文件编译成对应的 .o 文件。...通用规则 如果有多个类似的目标文件,可以使用通用规则。通用规则使用通配符 % 来匹配文件名的一部分。...通配符 Makefile 支持通配符,用于匹配文件列表。常用的通配符包括 *(匹配任意字符) %(匹配任意字符序列)。...描述了一个包含多个源文件的项目,其中包括了默认目标 all、清理目标 clean,以及两个生成目标:一个可执行文件一个静态库。...注意这个 Makefile 中的变量规则可以根据项目的结构需求进行适当的调整。 23. 安装规则 Makefile 可以包含安装规则,用于将可执行文件、库文件等安装到指定位置。

58210

Linux 开发 | 学习 Makefile

---- Makefile概述 基本格式 基本上每一个 Makefile 主体就是由若干个以下规则模块组成 : 表明输出的目标,输出目标的依赖对象生成目标需要执行的命令。...上面这段规则目标targets 是 edit, Makefile 中,targets 是文件名也可以是标号(比如clean),多个用空格分开,可以使用通配符(shell)。...静态模式 对应多个目标对象,构建每个对象对应名称的依赖关系的规则。...规则下对应的所有以 Tab 开头的指令,会被传递对应的 shell 执行。 Makefile 执行指令必须在 recipe 这个位置。...两个变量,一个是 SHELL,一个是 MAKEFLAGS,这两个变量不管你是否 export,其总是要传递下层 Makefile 中。

5.3K10

Linux下开发stm32 ④ | 标准固件库工程开发

这里,我们的工程模板就建好了,然后就是编写makefile来编译整个工程了: ?...修改makefile,添加所有的c源文件: ? 接下来解决第二个小问题,如何将这些源文件分别编译为对应的目标文件呢?...这里面targets定义了一系列目标文件,可以有通配符,是目标的一个集合;target-pattern指明了targets的模式,prereq-parrterns是目标的依赖模式,它对target-parrtern...形成的模式再进行一次依赖目标的定义: 首先我们需要一个目标集合,也就是使用刚刚的静态模式将上一步所有搜索的.c文件换为同名.o文件: ?...这个时候,我们基本的两个大问题就解决完了,接下来编译器参数,一个是添加宏定义,首先是芯片型号宏定义STM32F10X_HD,然后是USE_STDPERIPH_DRIVER,表明我们使用了标准外设驱动库;

1.5K20

Linux入门入土③(GCC、静态与动态链接库、Git、Make、Makefile)

), 依赖(depend) 命令(command):目标(target): 规则中的目标,这个目标规则中的命令是对应的通过执行规则中的命令,可以生成一个目标同名的文件规则中可以有多个命令,因此可以通过这多条命令来生成多个目标...Makefile 中的规则语句中经常会出现目标文件依赖文件,==自动变量用来代表这些规则中的目标文件依赖文件,并且它们只能在规则的命令中使用==。...模式匹配 -> 通过一个公式, 代表若干个满足条件的规则# 依赖有一个, 后缀为.c, 生成的目标是一个 .o 的文件, % 是一个通配符, 匹配的是文件名%.o:%.cgcc $< -c图片函数wildcard...,因此使用 % 表示即可 通配符是 %在通配符后边指定出要被替换的后缀,比如: %.c, 意味着 .c 的后缀要被替换掉replacement: 这是一个模式字符串,指定参数 pattern 中的后缀最终要被替换为什么还是使用...% 来表示参数 pattern 中文件的路径名字在通配符 % 后边指定出新的后缀名,比如: %.o 这表示原来的后缀被替换为 .otext: 该参数中存储这要被替换的原始数据返回值:函数返回被替换过后的字符串

1.5K10

Makefile学习1

很多开源项目可能文档不完整,而Makefile就是开源项目的地图,Makefile入手,可以让你快速窥探整个开源项目的框架概貌,让你深入代码而不至于迷路。...规则中也可以没有命令,仅仅包含目标目标依赖,仅仅用来描述一种依赖关系,但一个规则中一定要有一个目标。 默认目标 一个Makefile文件里通常会有多个目标,一般会选择第一个作为默认目标。...时可能会遇到,比如: $%:当规则目标是一个静态库文件时,$%代表静态库的一个成员名 $+:类似$^,但是保留了依赖文件中重复出现的文件 $*:在模式匹配和静态模式规则中,代表目标模式中%的部分。...另一个角度上看,就是实现了在Makefile中增加或者修改命令行参数的一种机制。...,会分别到各个子目录下去执行,解析各个子目录下的Makefile并运行,遍历完所有的子目录 make依次遍历各个子目录下解析新的Makefile时,项目顶层目录的主Makefile定义的一些变量,如何传递子目录的

33110

Makefile基本用法

管道命令 对要调用的规则施加特定的顺序,而不必强制更新目标,使用管道命令。 当执行此条规则,则首先需要执行先决条件的规则。然而当先决条件存在,不论是否被更改,都属于满足条件。...随后按原始顺序执行规则。 ? 通配符 *.o 匹配所有的.o文件, ? $?匹配修改过的文件 ? 赋值过程中没有被理解为通配符,而是认为就是*.o本身,需要使用wildcard$进行声明。 ? ?...在替换的目标中,\1表示替换的源的第一部分,然后添加.o空格规则下的先决条件名。 sed将上一句生成的依赖关系中的一些部分进行了替换,写入到了每个先决条件文件下。...当多个.d文件生成后,其中包含了各个依赖关系,使用include方法包括文件中,如下包含了foo.dbar.d。 其中的:.c=.d,将source中的.c替换为了对应的.d。....POSIX 如果.POSIX被称为目标,那么makefile将被解析并以符合POSIX的模式运行。 变量导出 使用export进行导出,供子makefile使用。

2.5K40

Make 命令教程

比如,假设文件 a.txt 依赖于 b.txt c.txt ,是后面两个文件连接(cat命令)的产物。那么,make 需要知道下面的规则。...像这样的规则,都写在一个叫做Makefile的文件中,Make命令依赖这个文件进行构建。Makefile文件也可以写为makefile, 或者用命令行参数指定为其他文件名。..."目标"是必需的,不可省略;"前置条件""命令"都是可选的,但是两者之中必须至少存在一个。 每条规则就明确两件事:构建目标的前置条件是什么,以及如何构建。下面就详细讲解,每条规则的这三个组成部分。...Makefile通配符与 Bash 一致,主要有星号(*)、问号(?) [...] 。比如, *.o 表示所有后缀名为o的文件。...f1.o: f1.c f2.o: f2.c 使用匹配符%,可以将大量同类型的文件,只用一条规则就完成构建。 3.5 变量赋值符 Makefile 允许使用等号自定义变量。

2K40

makefile终极奥义

「类似C语言中的宏」,当Makefile被执行时,其中的变量都会被扩展相应的引用位置上,可以直接把变量当成C语言中的宏理解。...(如:ld ) 隐晦规则 如果我们想定义一系列比较类似的文件,我们很自然地就想起使用通配符通配符 符号 含义 % 任意一个 ?...会自动推导生成.o文件 除了通配符makefile还提供了自动推导的自动变量 自动变量 符号 含义 $@ 代表目标文件 $^ 代表所有依赖文件 $< 代表第一个依赖文件 由此第二个版本出来了 第二个版本...函数 在Makefile中可以使用函数来处理变量,从而让我们的命令或是规则更为的灵活具有智能。...显式规则。显式规则说明了如何生成一个或多个目标文件。这是由Makefile的书写者明显指出要生成的文件、文件的依赖文件生成的命令。 隐晦规则

1.3K30

浅谈 Make 命令

比如,假设文件 a.txt 依赖于 b.txt c.txt ,是后面两个文件连接(cat命令)的产物。那么,make 需要知道下面的规则。...像这样的规则,都写在一个叫做Makefile的文件中,Make命令依赖这个文件进行构建。Makefile文件也可以写为makefile, 或者用命令行参数指定为其他文件名。..."目标"是必需的,不可省略;"前置条件""命令"都是可选的,但是两者之中必须至少存在一个。 每条规则就明确两件事:构建目标的前置条件是什么,以及如何构建。下面就详细讲解,每条规则的这三个组成部分。...Makefile通配符与 Bash 一致,主要有星号(*)、问号(?) [...] 。比如, *.o 表示所有后缀名为o的文件。...3.8 判断循环 Makefile使用 Bash 语法,完成判断循环。

1.3K10

如何使用Makefile在Ubuntu上自动执行重复任务

介绍 如果您有Linux服务器上的源代码安装软件的经验,您可能会遇到make实用程序。该工具主要用于自动编译构建程序。它允许应用程序的作者轻松地布置构建该特定项目所需的步骤。...手册页中,我们可以看到make将查找名为GNUmakefile的文件,然后查找makefile,然后查找Makefile。...此时,make将到达“target2”命令列表的末尾,并将控制权传递回“target1”目标。然后它将执行“target1命令”并退出。 source可以是文件或目标本身。...:此变量包含当前目标的比目标更新的依赖项列表。这些将是在执行此目标下的命令之前必须重新完成的目标。 $@:此变量是当前目标的名称。这允许我们引用您尝试制作的文件,即使此规则通过模式匹配。...对于后缀规则,这是用于创建目标的文件的名称。在我们的示例中,这将包含“file.jpg” $*:此文件是剥离匹配扩展名的当前依赖项的名称。将此视为目标文件源文件之间的中间阶段。

2.3K00

makefile

也就是Makefile中最核心的内容。 例如,假设有一个C源文件test.c,该源文件包含有自定义的头文件test.h,则目标文件test.o明确依赖于两个源文件:test.ctest.h。...第一个非注释行指定 test.o 为目标,并且依赖于 test.c test.h 文件。随后的行指定了如何目标所依赖的文件建立目标。...2、Makefile的基本内容 Makefile一般包括包含:显式规则、变量定义、隐含规则、文件指示注释等五个内容。 (1)显式规则:显式规则说明如何生成一个或多个的目标文件。...$@ ——表示规则中的目标文件集。在模式规则中,如果有多个目标,那么," $@ " 就是匹配于目标模式定义的集合。 $% ——仅当目标是函数库文件中,表示规则中的目标成员名。...模式规则看起来非常类似于正则规则,但在目标名称的前面多了一个 % 号,同时可用来定义目标依赖文件之间的关系,例如下面的模式规则定义了如何将任意一个 X.c 文件转换为 X.o 文件: %.c:%.o

1.9K00

5个编写高效Makefile文件的最佳实践

代表所有比目标文件更新的依赖文件列表。我们还可以使用通配符来匹配多个文件,例如*.c表示所有.c文件。 --- 使用模式规则 使用模式规则可以使我们更加灵活地编写Makefile文件。...它允许我们使用通配符来匹配文件名,并使用相同的规则来构建它们。...例如,我们可以使用以下规则来编译所有的.c文件: %.o: %.c $(CC) $(CFLAGS) -c $< -o $@ 这个规则指定了一个目标模式%.o,表示任意以.o结尾的目标文件。...它还指定了一个依赖模式%.c,表示与目标文件同名的.c源文件。最后,它使用$(CC)$(CFLAGS)变量来指定要使用的编译器编译选项。...为了使我们的Makefile文件更加简洁、易于维护灵活,可以通过一些技巧,包括使用变量、自动变量、模式规则.PHONY规则。 除此之外,我们还需要关注一些其他的方面。

28120

Linux 下的make命令与Makefile

会自动包含“foo.d”“bar.d”这两个makefile。...checktest:这两个目标一般用来测试makefile的流程。 如果你要书写这种功能,最好使用这种名字命名你的目标,这样规范一些,规范的好处就是——不用解释,大家都明白。...其它版本产商的make大同小异,不过其它产 商的make的具体参数还是请参考各自的产品文档。 -b, -m 这两个参数的作用是忽略其它版本make的兼容性。...) 我们可以注意,这个Makefile中并没有写下如何生成hello.okitty.o这两目标规则命令。...因为make的“隐含规则”功能会自动为我们自动去推导这两个目标的依赖目标生成命令。make会在自己的“隐含规则”库中寻找可以用的规则,如果找到,那么就会使用。如果找不到,那么就会报错。

10.1K20

扫码

添加站长 进交流群

领取专属 10元无门槛券

手把手带您无忧上云

扫码加入开发者社群

相关资讯

热门标签

活动推荐

    运营活动

    活动名称
    广告关闭
    领券