首页
学习
活动
专区
工具
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.4K10

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

在TensorFlow2.x中执行TensorFlow1.x代码的静态图执行模式 改为图执行模式 TensorFlow2虽然和TensorFlow1.x有较大差异,不能直接兼容。...但实际上还是提供了对TensorFlow1.x的API支持 ---- 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(

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

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

    26810

    【makefile】

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

    2K00

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

    这里的这个函数是截取字符串的意思,“@”表示目标的集合,就像一个数组,“ 七、静态模式 静态模式可以更加容易地定义多目标的规则,可以让我们的规则变得更加的有弹性和灵活。...不管全局的(CFLAGS)的值是什么,在prog目标,以及其所引发的所有规则中(prog.o foo.o bar.o的规则),(CFLAGS)的值都是“-g” 九、模式变量 在GNU的make中,还支持模式变量...而且,为了避免混乱,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 静态模式 静态模式可以更加容易地定义多目标的规则,可以让我们的规则变得更加的有弹性和灵活。...在GNU的make中,还支持模式变量(Pattern-specific Variable),通过上面的目标变量中,我们知道,变量可以定义在某个目标上。...使用函数 ———— 在Makefile中可以使用函数来处理变量,从而让我们的命令或是规则更为的灵活和具有智能。make所支持的函数也不算很多,不过已经足够我们的操作了。...这个特性是GNU make的,很有可能不兼容于其它版本的make,所以,你应该尽量避免使用"$*",除非是在隐含规则或是静态模式中。...还得要注意的是,这些变量只使用在规则的命令中,而且一般都是"显式规则"和"静态模式规则"(参见前面"书写规则"一章)。其在隐含规则中并没有意义。

    2.8K20

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

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

    1.8K40

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

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

    42720

    Makefile 使用总结

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

    3.6K30

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

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

    1.6K10

    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.2K20

    Linux 开发 | 学习 Makefile

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

    5.4K10

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

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

    1.1K30

    深度刨析makefile

    但是想象一下,加入现在我们的项目工程中包含上百个源文件,并且不同的源文件包含了不同的库(动态库、静态库、标准库等),又甚至不同的非标准库存放在不同的目录,或者有的源文件要用到多线程。...1.o, $@ 表示 1.a $+ 类似“$^”,但是它保留了依赖文件中重复出现的文件(主要用在程序链接时库的交叉引用场合),也就是说他也代表所有依赖文件,但是不会去除重复文件 $* 在模式规则和静态模式规则中...隐含规则会使用系统变量,我们可以通过系统变量来改变隐含规则运行时的参数,比如系统变量 CFLAGS 可以控制编译器的参数等。另外,我们还可以通过模式规则来写自己的隐含规则或使用后缀规则来保证兼容性。...注意,这些后缀必须是 make 认识的后缀。 这里要注意一个库文件的隐含规则,库文件 .a 就是 .o 文件通过 ar 打包出来的文件,关于链接库内容可见我的 Linux 专栏动态库与静态库文章。...② 模式的匹配 模式匹配字符 % 看可以代表任意个字符,在一个目标模式中必须要包含 % ,它可以代表文件后缀或者文件名。在模式中,把 % 所匹配的的内容叫做 茎 。

    13010

    文献分享---跨组织人成纤维细胞图谱揭示了在免疫调节中具有不同作用的肌成纤维细胞亚型(单细胞 + 空间)

    今日参考文献 反正现在发点好的文章,钱跟流水一样的没了。 钱多钱少大家没办法决定,但是大家能决定的是,机遇(样本)来临,能抓住(能分析好),就可以了。...空间转录组是真的烧钱 知识积累 成纤维细胞具有功能多样性,在炎症和癌症中起着至关重要的作用。 成纤维细胞在维持组织稳态、应对炎症和纤维化条件、帮助伤口愈合和促进癌症进展的复杂舞蹈中发挥关键作用。...结果2、慢性炎症和癌症期间成纤维细胞compartment的重塑 大多数组织特异性FC优先在健康组织中富集,进一步强调了它们在组织稳态中的作用。...结果5、在不同的癌症类型中,PI16+成纤维细胞和LRRC15+成纤维细胞参与空间上不同的多细胞模块 通过与不同免疫细胞亚群的相互作用来明显塑造免疫微环境的潜力。...结果6、MMP1+成纤维细胞有助于形成免疫抑制细胞生态位和免疫治疗耐药性 MMP1+和LRRC15+成纤维细胞特征显著富集,强调它们在免疫逃避中的潜在作用,并可作为癌症联合治疗的潜在靶点。

    14520

    Linux环境基础开发工具

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

    1.9K50

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

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

    2.4K00
    领券