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

GNU Make:如何在单个define..endef块中设置两个或更多依赖目标?

在GNU Make中,可以使用单个define..endef块来设置多个依赖目标。为了实现这一点,可以使用Makefile中的多行变量和Makefile函数。

下面是一个示例Makefile,展示了如何在单个define..endef块中设置两个或更多依赖目标:

代码语言:txt
复制
define my_rule
target1 target2: dependency1 dependency2
    # 在这里编写规则的命令
endef

# 调用my_rule定义的规则
$(eval $(my_rule))

在这个示例中,my_rule是一个多行变量,其中包含了两个目标(target1target2)以及它们的依赖关系(dependency1dependency2)。在define..endef块之后,使用$(eval $(my_rule))来调用这个规则。

这样,当执行Makefile时,Make会根据这个规则来构建target1target2,并执行相应的命令。

需要注意的是,这个示例中没有提及具体的腾讯云产品和链接地址,因为GNU Make是一个构建工具,与云计算品牌商没有直接关联。

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

相关·内容

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

–file”参数,make -f Make.Linuxmake –file Make.AIX。...要达到这一目的很简单,需在make命令后直接跟目标的名字就可以完成(如前面提到的“make clean”形式) 任何在makefile目标都可以被指定成终极目标,但是除了以“-”打头,或是包含了“=...因为make的“隐含规则”功能会自动为我们自动去推导这两个目标依赖目标和生成命令。 make会在自己的“隐含规则”库寻找可以用的规则,如果找到,那么就会使用。如果找不到,那么就会报错。...当然,我们也可以使用make的参数“-r”“–no-builtin-rules”选项来取消所有的预设置的隐含规则。...一个模式规则就好像一个一般的规则,只是在规则目标的定义需要有”%”字符。”%”的意思是表示一个多个任意字符。在依赖目标同样可以使用”%”,只是依赖目标的”%”的取值,取决于其目标

4.3K20

Linux:常用软件、工具和周边知识介绍

拓展软件源: 拓展软件源是由第三方组织社区提供的,EPEL、RPM Fusion等。 这些软件源提供了一些官方软件源没有的软件包,或者提供了更新版本的软件包,以满足用户更多的需求。...它们提供了更多的软件选择和功能扩展,多媒体编解码器、图形界面工具、开发工具等。...test_make 在Makefile依赖关系表示目标文件依赖于哪些其他文件,而依赖方法表示如何生成目标文件 依赖关系: 在Makefile,每个目标文件都有一组依赖关系,这些依赖关系指示了生成目标文件所需的其他文件操作...依赖关系是指在构建目标文件之前需要先构建获取的文件操作。 依赖关系通常是源文件其他目标文件,它们是构建目标文件的输入先决条件。...如果目标文件的依赖文件也不存在,那么 make 将会在当前文件查找目标文件的依赖性,并根据规则生成缺失的依赖文件。

21110

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

--file”参数,make -f Make.Linuxmake --file Make.AIX。...变量可以使用在许多地方,规则的“目标”、“依赖”、“命令”以及新的变量。...要达到这一目的很简单,需在make命令后直接跟目标的名字就可以完成(如前面提到的“make clean”形式)任何在makefile目标都可以被指定成终极目标,但是除了以“- ”打头,或是包含了“=...因为make的“隐含规则”功能会自动为我们自动去推导这两个目标依赖目标和生成 命令。 make 会在自己的“隐含规则”库寻找可以用的规则,如果找到,那么就会使用。如果找不到,那么就会报错。...一个模式规则就好像一个一般的规则,只是在规则目标的定义需要有"%"字符。"%"的意思是表示一个多个任意字符。在依赖目标同样可以使用"%",只是依赖目标的"%"的取值,取决于其目标

2.7K20

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

下一行只是一个宏定义;它将OBJS变量设置两个对象文件的文件名。这在后面会很重要。现在,请注意如何定义宏以及如何在后面引用它($(OBJS))。...宏展开为aux.o和main.o,所以myprog依赖于这两个文件(它们必须是实际的文件,因为在整个Makefile没有这些名称的目标)。...一个make变量在构建目标时会发生变化。因为你从不手动设置make变量,所以下面的列表包括$符号。...在第16章你会看到更多关于这个的内容。 在非常罕见的情况下,你可能会发现开发人员选择不使用这个目标来删除可执行文件,而是更喜欢使用类似realclean的目标。...每当你修改这两个源文件的一个时,make 都会尝试重建这两个程序。

9410

Makfile文件的编写

Makfile文件的编写 不定期更新 make和Makefile 以下来自百度百科 make: make是一条计算机指令,是在安装有GNU Make的计算机上的可执行指令。...有时make又指GNU MakeGNU Make 是一个用来控制可执行文件和其他一些从源文件来的非源代码文件版本的软件。...中间文件,这两个文件需要在下一部分声明其生成方式。...三、声明依赖目标文件生成 这部分是声明所有依赖的文件的生成方式,使用了make的默认生成规则,语法是 目标文件: 依赖的头文件和源文件 这部分对应的内容是 main.o : main.c stack.o...该部分的主要内容就是rm $(object)这条命令,它会删除object的所有依赖目标文件,如果存在的话。 使用 生成可执行文件 make 清除中间文件 make clean

68430

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

(任意的Shell命令) 这是一个文件的依赖关系,也就是说,target这一个多个的目标文件依赖于prerequisites的文件,其生成规则定义在command。...--file”参数,:make -f Make.Linuxmake --file Make.AIX。...于是,我们可以写出[.c]文件和[.d]文件的依赖关系,并让make自动更新自成[.d]文件,并把其包含在我们的主Makefile,这样,我们就可以自动化地生成每个文件的依赖关系了。...而make参数“-s”“--slient”则是全面禁止命令的显示。 二、命令执行 当依赖目标新于目标时,也就是当规则的目标需要被更新时,make会一条一条的执行其后的命令。...变量可以使用在许多地方,规则的“目标”、“依赖”、“命令”以及新的变量

3.2K20

可移植的 Makefile 教程

make 的核心就是一个多个依赖树(dependency tree),这些依赖树是由 规则(rule)构造而来。树的每个节点叫做“目标(target)”。...and choosing targets 当调用 make 时,它会从依赖接受零个多个目标, 如果目标过时(out-of-date)了,然后构建这些目标 -- 比如,运行目标规则的命令。...更多实际目标,可以作为必要条件加入到默认目标。这个 Makefile 的使用者也可以使用 make all 来构建整个项目。 另一个常见的伪目标是 clean,它会移除所有 make 创建的文件。...当谈到 make 时,总是喜忧参半。 喜的是 make 能做。你可以为目标和先决条件设置任何你喜欢的文件名。...有很多教程讲述了如何在构建时同时生成依赖,但是它很脆弱和缓慢。最好是在一次性完成,在 Makefile 写好依赖,以便于 make 能够如期工作。

1.3K10

Linux 下的make命令与Makefile

要达到这一目的很简单,需在make命令后直接跟目标的名字就可以完成(如前面提到的“make hello_kitty”形式)任何在makefile目标都可以被指定成终极目标,甚至没有被我们明确写出来的目标也可以成为...因为make的“隐含规则”功能会自动为我们自动去推导这两个目标依赖目标和生成命令。make会在自己的“隐含规则”库寻找可以用的规则,如果找到,那么就会使用。如果找不到,那么就会报错。...在上面的那个例子make调用的隐含规则是,把.o 的目标依赖文件设置成.c ,并使用C的编译命令cc -c 隐含规则列表 这里我们将讲述所有预先设置(也就是make内建)的隐含规则,如果我们不明确地写下规则...当然,我们也可以使用make的参数-r–no-builtin-rules选项来取消所有的预设置的隐含规则。....o 的目标依赖目标会自动推导为.p ,并且其生成命令是 隐含规则使用的变量 在隐含规则的命令,基本上都是使用了一些预先设置的变量。

10.1K20

RISC-V SoC + AI | 在全志 D1「哪吒」开发板上,跑个 ncnn 神经网络推理框架的 demo

本文 是一份教程,步骤骑着步骤 (step by step) 地展示了如何在全新的全志 D1「哪吒」开发板上,跑个 ncnn 神经网络推理框架的 demo。...我们可先尝试两个 demo,分别为: ① 使用 benchncnn 做基准测试 ② 使用 NanoDet 模型对一张自己的图片做目标检测(NanoDet 是个可在移动端超快运行的超轻量目标检测模型)...检查设备与电脑的连接情况,可以使用 adb devices adb push 可以把电脑上的文件文件夹传给开发板,使用语法如下 adb push adb...pull 可以把开发板上的文件文件夹传给电脑,使用语法如下 adb pull 要注意的是,开发板上的路径都需要填写绝对路径。...到了这里,我们就成功在一运行 GNU/Linux 系统的 RISC-V 开发板上跑了个神经网络框架的 demo,如果想进行后续的实验研发,可以了解有关 D1 哪吒 和 ncnn 的更多内容。

31310

CMake vs Make对比

构建过程的细节实际上记录在您提供的makefile。根据哪些源文件已更改,“自动”自动显示需要更新的文件。它还自动确定更新文件的正确顺序,以防一个非源文件依赖于另一个非源文件。...因此,如果您更改了一些源文件,然后运行“Make”,它不会重新编译整个事情。它仅更新直接间接依赖于您更改的源文件的那些非源文件。很整洁!“Make”不限于任何特定语言。...对于CMake,有两个步骤:首先,您需要设置构建环境(通过在构建目录中键入cmake 运行某些GUI客户端)。...其次,您在选定的构建系统执行实际构建。 我们将在这里跳入GNU构建系统领域。如果你不熟悉,这一段可能看起来像是jibber-jabber给你。好的,现在我给了法定的警告,我们继续吧!...但这只是便携式软件开发的一小部分。为此,GNU项目开发了一套集成的实用工具来完成Autoconf开始的工作:GNU构建系统,其最重要的组件是Autoconf,Automake和Libtool。

4K31

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

它建议您使用Makefile,因为GNUmakefile是针对GNU特定的命令,而makefile并不突出。 Makefile是特定于目录的,这意味着make将在调用它的目录搜索以查找这些文件。...source source是对文件其他target的引用。它们代表与之关联的目标的准备依赖关系。...某些版本的make对于缩进命令部分的方式很灵活,但一般来说,您应该坚持使用单个选项卡以确保make能够识别您的意图。 Make目标定义下的每个缩进行视为单独的命令。...您所见,我们已将.jpeg添加到后缀列表,并为我们的规则添加了另一个后缀匹配项。 创建一些Targets 我们现在在Makefile中有很多,但我们还没有任何正常的目标。...现在,我们可以将这两个目标串在一起作为另一个目标依赖关系: JPEG=$(wildcard *.jpg *.jpeg) JPG=$(JPEG:.jpeg=.jpg) PNG=$(JPG:.jpg=.png

2.3K00

Makefile 的使用

要想完整地了解 Makefile 的规则,请参考《GNU Make 使用手册》,以下仅粗略介绍。...这时我们需要把“clean”这个目标设置为“假想目标”,这样可以确保执行“make clean”时那些删除命令肯定可以得到执行。...通常,如果一个依赖发生了变化,就需要规则调用命令以更新创建目标。但是并非所有的目标都有依赖,例如,目标“clean”的作用是清除文件,它没有依赖。 规则一般是用于解释怎样和何时重建目标。...make 首先调用命令处理依赖,进而才能创建更新目标。 当然,一个规则也可以是用于解释怎样和何时执行一个动作,即打印提示信息。...运行“make clean”时,由于目标 clean 没有依赖,它的命令“rm -f hello”将被强制执行。

4.3K42

Makefile 的使用(在 Linux 中使用 make 命令来编译程序)

要想完整地了解 Makefile 的规则,请参考《GNU Make 使用手册》,以下仅粗略介绍。...这时我们需要把“clean”这个目标设置为“假想目标”,这样可以确保执行“make clean”时那些删除命令肯定可以得到执行。...通常,如果一个依赖发生了变化,就需要规则调用命令以更新创建目标。但是并非所有的目标都有依赖,例如,目标“clean”的作用是清除文件,它没有依赖。 规则一般是用于解释怎样和何时重建目标。...make 首先调用命令处理依赖,进而才能创建更新目标。 当然,一个规则也可以是用于解释怎样和何时执行一个动作,即打印提示信息。...运行“make clean”时,由于目标 clean 没有依赖,它的命令“rm -f hello”将被强制执行。

8.9K10

数据库PostrageSQL-从源代码安装

编译PostgreSQL需要下列软件包: 要求GNU make版本3.80或以上;其他的make程序更老的GNU make版本将不会工作(GNU make有时以名字gmake安装)。...你可以通过给出下面的configure命令行选项的一个更多的选项来自定义编译和安装过程: --prefix=PREFIX 把所有文件装在目录PREFIX而不是/usr/local/pgsql。...要使用哪个是一个性能问题,但是开发者的共同习惯是将 PROFILE用于一次性的标识调整,而始终保持设置COPT。 编译 要开始编译,键入: make (一定要记得用GNU make)。...你应该把这些命令放到 shell启动文件,/etc/profile~/.bash_profile。...这并不依赖于硬件类型使用的内核。这些32位进程被限制在 4GB 的内存,并被使用几种模型之一安排成 256 MB 的段。该默认值允许在堆中低于256 MB,因为它和栈共享一个单独的段。

4.1K40
领券