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

在gnu make中,静态模式规则中的先决条件可以具有不同的后缀

在GNU Make中,静态模式规则是一种特殊的规则,它允许您为一组类似的目标定义一个通用的规则。静态模式规则的语法如下:

代码语言:txt
复制
targets : prerequisites
    command

在这个规则中,targets是一个或多个目标文件的模式,prerequisites是一个或多个先决条件文件的模式,command是一个或多个命令行。

在静态模式规则中,prerequisites可以具有不同的后缀,这意味着您可以为不同的目标文件定义不同的先决条件文件。例如,如果您有一个名为foo.c的C源文件,您可以定义一个静态模式规则,该规则将foo.c作为目标文件,并将foo.o作为先决条件文件。然后,您可以使用%字符来引用目标文件中的文件名,并在命令中使用它。例如:

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

在这个规则中,%.o是目标文件的模式,%.c是先决条件文件的模式,$<表示先决条件文件的名称,$@表示目标文件的名称。这个规则将foo.c作为先决条件文件,将foo.o作为目标文件,并使用gcc命令将foo.c编译为foo.o

总之,在GNU Make中,静态模式规则是一种非常有用的工具,它可以帮助您更轻松地管理复杂的构建过程。

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

相关·内容

可移植 Makefile 教程

它应该是看起来比较显然一些东西,这样即使一个用户盲目地运行 make,也会得到一个有用结果。 一个目标可以被指定多次。任何新先决条件,都会被附加到已有的先决条件。...一个规则,命令会随即跟在目标或先决条件那一行后面。每个命令行必须以一个 tab 字符开头。如果你编辑器不能进行相关配置的话,可能会非常麻烦。...我会用 game 作为新 all 目标的一个先决条件。更多实际目标,可以作为必要条件加入到默认目标。这个 Makefile 使用者也可以使用 make all 来构建整个项目。...如果有某种方式能够在这种模式通信不是更好吗?幸运是,我们有 推断规则(inference rule)。它说是某个特定扩展名目标,有另一个特定扩展名先决条件,该目标通过某种确定方式构建。...一个推断规则,目标隐式表明了扩展名是什么。$< 宏展开为先决条件,这对使得推断规则变得更加通用十分重要。不幸是,这个宏目标规则并不存在,这些都是有用

1.3K10

TensorFlow2.x执行TensorFlow1.x代码静态图执行模式

TensorFlow2.x执行TensorFlow1.x代码静态图执行模式 改为图执行模式 TensorFlow2虽然和TensorFlow1.x有较大差异,不能直接兼容。...但实际上还是提供了对TensorFlow1.xAPI支持 ---- TensorFlow 2执行或开发TensorFlow1.x代码,可以做如下处理: 导入TensorFlow时使用 import...tensorflow.compat.v1 as tf 禁用即时执行模式 tf.disable_eager_execution() 简单两步即可 举例 import tensorflow.compat.v1...) node1 = tf.constant(3.0) node2 = tf.constant(4.0) node3 = tf.add(node1,node2) print(node3) 由于是图执行模式...,这时仅仅是建立了计算图,但没有执行 定义好计算图后,需要建立一个Session,使用会话对象来实现执行图执行 sess = tf.Session() print("node1:",sess.run(

84730

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

Vim ,命令模式(Normal Mode)是默认模式,在这个模式下你可以执行各种编辑文本操作。...以下是一些常用命令模式操作: 这些操作都是 Vim 命令模式(Normal Mode)下使用命令模式下,你可以通过按下不同键来执行各种编辑文本操作。...静态库(Static Library): 定义:静态库是一组已编译目标文件(通常以.a为后缀),其中包含了函数和数据,可以被多个程序使用。...每个使用了静态程序都会拷贝一份静态库代码,造成了一定代码冗余。 使用静态库编译程序可以没有任何其他文件情况下运行。...如果目标文件依赖文件也不存在,那么 make 将会在当前文件查找目标文件依赖性,并根据规则生成缺失依赖文件。

19910

【makefile】

(3)隐含规则:由于GNU make具有自动推导功能,所以隐晦规则可以比较粗糙地简略地书写Makefile,然后由GNU make自动推导功能完成隐晦规则内容。...模式规则,如果有多个目标,那么," $@ " 就是匹配于目标模式定义集合。 $% ——仅当目标是函数库文件,表示规则目标成员名。...2.2隐含规则 GNU make 包含有一些内置或隐含规则,这些规则定义了如何从不同依赖文件建立特定类型目标。...后缀规则定义了将一个具有某个后缀文件 (例如,.c 文件)转换为具有另外一种后缀文件(例如,.o 文件)方法。...2.4 Makefile函数 Makefile可以使用函数来处理变量,从而让命令或规则更为灵活和具有智能,函数调用,很像变量使用,也是以“$”来标识,函数调用后,函数返回值可以当做变量来使用

1.9K00

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

这里这个函数是截取字符串意思,“@”表示目标的集合,就像一个数组,“ 七、静态模式 静态模式可以更加容易地定义多目标的规则可以让我们规则变得更加有弹性和灵活。...不管全局(CFLAGS)值是什么,prog目标,以及其所引发所有规则(prog.o foo.o bar.o规则),(CFLAGS)值都是“-g” 九、模式变量 GNUmake,还支持模式变量...而且,为了避免混乱,make不允许把整个条件语句分成两部分放在不同文件。 使用函数 ———— Makefile可以使用函数来处理变量,从而让我们命令或是规则更为灵活和具有智能。...这个特性是GNU make,很有可能不兼容于其它版本make,所以,你应该尽量避免使用”*”,除非是隐含规则或是静态模式。...六、老式风格后缀规则后缀规则是一个比较老式定义隐含规则方法。后缀规则会被模式规则逐步地取代。因为模式规则更强更清晰。为了和老版本Makefile兼容,GNU make同样兼容于这些东西。

4.3K20

Makefile基本用法

来源 https://www.gnu.org/software/make/manual/make.pdf 简单例子 其中cc通过链接,间接指向/usr/bin/gcc。...也可用FORCE替换.PHONY,效果一致,而FORCE可以换一个名字,只是一个标记。 ? 使用默认编译再次简化 虽然更紧凑,但是每个目标的所依赖信息放在不同地方,可能不够清晰。 ?...管道命令 对要调用规则施加特定顺序,而不必强制更新目标,使用管道命令。 当执行此条规则,则首先需要执行先决条件规则。然而当先决条件存在,不论是否被更改,都属于满足条件。...当一个先决条件名称格式为'-lname'时,make通过搜索文件来专门处理它libname.so文件 如果找不到,则在当前目录libname.a文件 通过匹配vpath搜索路径和vpath搜索路径指定目录...替换目标,\1表示替换第一部分,然后添加.o和空格和该规则先决条件名。 sed将上一句生成依赖关系一些部分进行了替换,写入到了每个先决条件文件下。

2.5K40

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

3.7 静态模式 静态模式可以更加容易地定义多目标的规则可以让我们规则变得更加有弹性和灵活。...GNUmake,还支持模式变量(Pattern-specific Variable),通过上面的目标变量,我们知道,变量可以定义某个目标上。...使用函数 ———— Makefile可以使用函数来处理变量,从而让我们命令或是规则更为灵活和具有智能。make所支持函数也不算很多,不过已经足够我们操作了。...这个特性是GNU make,很有可能不兼容于其它版本make,所以,你应该尽量避免使用"$*",除非是隐含规则或是静态模式。...还得要注意是,这些变量只使用在规则命令,而且一般都是"显式规则"和"静态模式规则"(参见前面"书写规则"一章)。其隐含规则并没有意义。

2.7K20

如何在虚拟机配置静态IP,以解决NAT模式网络连接问题?

虚拟机是一种常见技术,可以计算机上模拟一个完整操作系统和应用程序环境,来运行不同操作系统和软件。实际开发和测试工作,经常需要使用虚拟机来模拟特定环境,并进行相关测试和开发工作。...而在虚拟机,网络连接问题是使用过程中最常见问题之一。本文将详细介绍如何在虚拟机配置静态IP,以解决NAT模式网络连接问题。...NAT模式虚拟机,有多种网络连接方式可供选择,其中NAT模式是其中一种较为常见方式。NAT模式下,虚拟机可以通过宿主机网络连接进行访问,但是宿主机和其他物理机器无法直接访问到虚拟机。...高级设置可以看到虚拟网卡MAC地址和IP地址等信息,其中IP地址为自动获取默认IP地址。修改静态IP地址完成虚拟网卡设置之后,便可以进入操作系统内部,修改虚拟机静态IP地址。...NAT模式下,虚拟机可以通过宿主机网络连接进行访问,但是无法使用外部网络服务和被外部机器访问。为了解决这个问题,可以对虚拟机进行静态IP配置,以便于更好地管理和控制网络连接。

1.5K40

Visual Studio 新旧不同 csproj 项目格式启用混合模式调试程序(开启本机代码调试)

因为我使用 Visual Studio 主要用来编写 .NET 托管程序,所以平时调试时候是仅限托管代码。不过有时需要在托管代码混合调试本机代码,那么就需要额外在项目中开启本机代码调试。...旧格式项目中开启 旧格式指的是 Visual Studio 2015 及以前版本 Visual Studio 使用项目格式。...项目上右键 -> 属性 -> Debug,这时你可以底部调试引擎中发现 Enable native code debugging 选项,开启它你就开启了本机代码调试,于是也就可以使用混合模式调试程序...新格式项目中开启 如果你在你项目属性 Debug 标签下没有找到上面那个选项,那么有可能你项目格式是新格式。 这个时候,你需要在 lauchsettings.json 文件设置。...如果你没有找到这个文件,那么随便在上图那个框框写点什么(比如在启动参数一栏写 吕毅是逗比),然后保存。我们就能得到一个 lauchsettings.json 文件。

34820

Makefile 使用总结

模式规则,如果有多个目标,那么,"$@"就是匹配于目标模式定义集合。 $%     仅当目标是函数库文件,表示规则目标成员名。...如果目标没有模式定义,那么"$*"也就不能被推导出,但是,如果目标文件后缀make所识别的,那么"$*"就是除了后缀那一部分。...这个特性是GNU make,很有可能不兼容于其它版本make,所以,你应该尽量避免使用"$*",除非是隐含规则或是静态模式。...这是GNU make老版本特性,新版本,我们使用函数"dir"或"notdir"就可以做到了。"D"含义就是Directory,就是目录,"F"含义就是File,就是文件。...还得要注意是,这些变量只使用在规则命令,而且一般都是"显式规则"和"静态模式规则"(参见前面"书写规则"一章)。其隐含规则并没有意义。 1.

3.5K30

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

/test //执行可执行程序静态与动态链接库不管是 Linux 还是 Windows 库文件其本质和工作模式都是相同,只不过不同平台上库对应文件格式和文件后缀不同。...动态库是有执行权限,而静态库是没有执行权限静态制作与使用在 Windows 静态库一般以 lib 作为前缀,以 lib 作为后缀,中间是库名字需要自己指定,即: libxxx.lib Linux...,所有目标也可以有很多个通过执行规则命令,可以只执行一个动作,不生成任何文件,这样目标被称为伪目标依赖(depend): 规则所必需依赖条件,规则命令可以使用这些依赖。...这个规则模板可以写成下边样子,这种操作就称之为模式匹配。...% 表示即可 通配符是 %通配符后边指定出要被替换后缀,比如: %.c, 意味着 .c 后缀要被替换掉replacement: 这是一个模式字符串,指定参数 pattern 后缀最终要被替换为什么还是使用

1.5K10

Make 快速入门

prerequisites: 先决条件是用于生成 target 文件输入文件或是完成 target 任务前需要先执行任务 。一个 target 可以没有先决条件,也可以有一个或多个先决条件。... Makefile 所在目录运行不带参数 make 命令: make 会启动 Makefile 文件第一个 target ,本例是 help , make 将 Makefile 第一个出现 target...既可以出现在目标,先决条件,也可以出现在“菜谱” shell 命令可以是命令本身,也可以是命令选项,或者输入输出文件;甚至也可以出现在另一个变量引用(计算变量)。...不同make 变量名称可以是任何不包含 :, #, = 和空字符字符序列,并且等号两边可以有空格(shell 定义变量等号两个不允许出现空格)。...: GNU make

1.5K10

Linux 下make命令与Makefile

make pro2”来单独编译目标“pro2” 即然make可以指定所有makefile目标,那么也包括“伪目标”,我们可以根据这种性质来让我们makefile根据指定不同目标来完成不同事...Unix世界,软件发布时,特别是GNU这种开源软件发布时,其makefile都包含了编译、安装、打包等功能。 我们可以参照这种规则来书写我们makefile目标。...用“后缀规则”来定义隐含规则会有许多限制。使用“模式规则”会更回得智能和清楚,但“后缀规则可以用来保证我们Makefile兼容性。...一个模式规则就好像一个一般规则,只是规则,目标的定义需要有% 字符。% 意思是表示一个或多个任意字符。依赖目标同样可以使用% ,只是依赖目标% 取值,取决于其目标。...这个特性是GNUmake,很有可能不兼容于其它版本make,所以,你应该尽量避免使用*,除非是隐含规则或是静态模式。如果目标后缀make所不能识别的,那么?

10.1K20

Linux 开发 | 学习 Makefile

@(linux 编程)[开发技能, 工具使用] What is GNU Make Make 是控制工程通过源码生成可执行文件和其他相关文件工具。...可以是文件,比如下文 基本例子 edit 或者 main.o,也可以是标签,比如 clean。 prerequisites : 先决条件,前提依赖,指明想要 target,需要先有哪些依赖。...Make 搜寻文件 实际,比较大工程文件都会分类放在不同目录下,当 Make 需要寻找文件依赖关系时候,需要告知去寻找路径,否则 make 只会查找当前目录。...静态模式 对应多个目标对象,构建每个对象对应名称依赖关系规则。...手册详细描述 ---- 条件判断 简述 类比程序条件编译, Make 可以根据运行时不同情况选择执行不同分支。

5.3K10

【DB笔试面试800】Oracle,归档和非归档模式之间不同点是什么?它们各自优缺点是什么?

♣ 题目部分 Oracle,归档和非归档模式之间不同点是什么?它们各自优缺点是什么? ♣ 答案部分 Oracle数据库,数据库可以设置为归档模式和非归档模式。...非归档模式则相反,不能恢复到任意一个时间点,但是非归档模式可以带来数据库性能上少许提高,因为非归档模式没有归档日志。...NOARCHIVELOG模式具有以下特点: 1)当CHECKPOINT完成后,LGWR进程可以覆盖重做日志内容。...l 大多数情况下,数据库处于NOARCHIVELOG模式(默认模式)时,只能恢复到最后一次备份时状态。该备份之后执行所有事务处理都会丢失。...l 利用RMAN备份数据库,若是归档模式可以OPEN状态下备份,若是非归档模式则不能在OPEN状态下备份。

1K30

Linux环境基础开发工具

后缀名一般为 “.a” 动态库与之相反,在编译链接时并没有把库文件代码加入到可执行文件,而是程序执行时由运行时链接文件加载库,这样可以节省系统开销。...make是一个命令工具,是一个解释makefile中指令命令工具,一般来说,大多数IDE都有这个命令,比如:Delphimake,Visual C++nmake,Linux下GNUmake。...make有自动推导功能,所以隐晦规则可以让我们比较粗糙地简略地书写makefile,比如源文件与目标文件之间时间关系判断之类 makefile可以定义变量,当makefile被执行时,其中变量都会被扩展到相应引用位置上...make执行规则是,只生成所有目标对象第一个,当然make会根据语法规则,递归生成第一个目标对象所有依赖对象后再回头生成第一个目标对象,生成后退出。...make执行makefile规则,根据语法规则,会分析目标对象与依赖对象时间信息,判断是否在上一次生成后,源文件发生了修改,若发生了修改才需要重新生成。

1.8K50

如何使用MakefileUbuntu上自动执行重复任务

可以根据需要添加任意数量缩进行和命令。Make会一次一个地浏览它们。 命令告诉make不同方式处理它们之前,我们可以放置一些东西: -:命令前破折号告诉make如果遇到错误则不中止。...然后它将在目录查找“.png”替换为“.jpg”目标文件。然后它将执行后面的命令。 后缀规则使用了一些我们尚未介绍变量。这些帮助根据当前流程哪个部分替换不同信息: $?...:此变量包含当前目标的比目标更新依赖项列表。这些将是执行此目标下命令之前必须重新完成目标。 $@:此变量是当前目标的名称。这允许我们引用您尝试制作文件,即使此规则通过模式匹配。...$<:这是当前依赖项名称。对于后缀规则,这是用于创建目标的文件名称。我们示例,这将包含“file.jpg” $*:此文件是剥离匹配扩展名的当前依赖项名称。...Make将转到Makefile,请参阅.SUFFIXES声明.png,然后转到匹配后缀规则。然后运行列出命令。

2.3K00

探索Linux内核:Kconfig秘密

KBuild 组件式建筑,称为递归制作,是GNU一种常见方式。制作,使管理一个大型项目。KBuild是递归make一个很好例子。...KBuild指的是不同类型makefile: Makefile位于源根顶部makefile。 .config是内核配置文件。...编译源文件命令行也很重要,因为不同命令行可能导致不同对象文件。 当.C文件通过#include指令,您需要编写这样规则: main.o: defs.h recipe......管理一个大型项目时,您需要很多这样规则;所有这些规则都会乏味。幸运是,大多数现代C编译器可以通过查看#include源文件行。...如果你很快看到了与本文不同东西,不要感到惊讶。 总结 以上就是这篇文章全部内容了,希望本文内容对大家学习或者工作具有一定参考学习价值,谢谢大家对ZaLou.Cn支持。

1.7K11

C++ 编译体系入门指北

GCC 编译流程 GCC,全称GNU Compiler Collection(GNU编译器套件),是由GNU项目开发一款编译器软件,可以编译多种编程语言,包括C、C++、Objective-C、Fortran...生成目标文件通常以.o(Unix-like系统)或.obj(Windows系统)为后缀。 链接(Linking):链接器将一个或多个目标文件以及需要库链接成一个可执行文件或库。...构建系统 随着项目工程越来越复杂,源代码文件越来越多,编译配置项根据场景不同越来越复杂(例如,Debug模式和Release模式下编译参数不一样)时候,依然通过直接调用这些命令时候就会很复杂,我们需要编写大量复杂命令行才能完成一个复杂项目的编译工作...Make是命令行工具,Makefiles 配置文件指明了项目中具有哪些源代码、编译规则逻辑等信息。...罗马并非一天建成,C++ 编译体系也随着软件工程发展也逐步演进当中,我们可以针对不同业务诉求来选择相应工具。

43521
领券