Makefile中的自动化变量

以下内容源于C语言中文网的学习与整理,非原创,如有侵权请告知删除。

自动化变量,可以理解为由 Makefile 自动产生的变量。

在模式规则中,规则的目标和依赖的文件名代表了一类的文件。在 Makefile 中描述规则时,依赖文件和目标文件往往是变动的,在命令中不应该出现具体的文件名称,否则规则将失去意义。那么如何表示这些文件呢?使用“自动化变量”!自动化变量的取值,取决于执行规则的目标文件和依赖文件。

下面对所有的自动化变量进行说明。

自动化变量说明
$@表示规则的目标文件名。如果目标是一个文档文件(Linux 中,一般成 .a 文件为文档文件,也成为静态的库文件),
那么它代表这个文档的文件名。在多目标模式规则中,它代表的是触发规则被执行的文件名。
$%当目标文件是一个静态库文件时,代表静态库的一个成员名。
$<规则的第一个依赖的文件名。如果是一个目标文件使用隐含的规则来重建,则它代表由隐含规则加入的第一个依赖文件。
$?所有比目标文件更新的依赖文件列表,空格分隔。如果目标文件时静态库文件,代表的是库文件(.o 文件)。
$^代表的是所有依赖文件列表,使用空格分隔。如果目标是静态库文件,它所代表的只能是所有的库成员(.o 文件)名。
一个文件可重复的出现在目标的依赖中,变量“$^”只记录它的第一次引用的情况。就是说变量“$^”会去掉重复的依赖文件。
$+类似“$^”,但是它保留了依赖文件中重复出现的文件。主要用在程序链接时库的交叉引用场合。
$*在模式规则和静态模式规则中,代表“茎”。“茎”是目标模式中“%”所代表的部分(当文件名中存在目录时,
“茎”也包含目录部分)。

实例1:

test:test.o test1.o test2.ogcc -o $@ $^
test.o:test.c test.hgcc -o $@ $<
test1.o:test1.c test1.hgcc -o $@ $<
test2.o:test2.c test2.hgcc -o $@ $<

这个规则模式中用到了 "$@" 、"$<" 和 "$^" 这三个自动化变量,其中 "$@" 代表的是目标文件test,“$^”代表的是依赖的文件,“$<”代表的是依赖文件中的第一个。我们在执行 make 的时候,make 会自动识别命令中的自动化变量,并自动实现自动化变量中的值的替换,这个类似于编译C语言文件的时候的预处理的作用。

实例2:

lib:test.o test1.o test2.oar r $?

假如我们要做一个库文件,库文件的制作依赖于这三个文件。当修改了其中的某个依赖文件,在命令行执行 make 命令,库文件 "lib" 就会自动更新。"$?" 表示修改的文件。

 

GNU make 中在这些变量中加入字符 "D" 或者 "F" 就形成了一系列变种的自动化变量,这些自动化变量可以对文件的名称进行操作。下面是一些详细的描述:

变量名功能
$(@D)表示文件的目录部分(不包括斜杠)。如果 "$@" 表示的是 "dir/foo.o" 那么 "$(@D)" 表示的值就是 "dir"。如果 "$@" 不存在斜杠(文件在当前目录下),其值就是 "."。
$(@F)表示的是文件除目录外的部分(实际的文件名)。如果 "$@" 表示的是 "dir/foo.o",那么 "$@F" 表示的值为 "dir"。
$(*D)
$(*F)
分别代表 "茎" 中的目录部分和文件名部分
$(%D)
$(%F)
当以 "archive(member)" 形式静态库为目标时,分别表示库文件成员 "member" 名中的目录部分和文件名部分。踏进对这种新型时的目标有效。
$(<D)
$(<F)
表示第一个依赖文件的目录部分和文件名部分。
$(^D)
$(^F)
分别表示所有依赖文件的目录部分和文件部分。
$(+D)
$(+F)
分别表示所有的依赖文件的目录部分和文件部分。
$(?D)
$(?F)
分别表示更新的依赖文件的目录部分和文件名部分。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/460718.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Makefile中的文件搜索路径(VPATH和vpath)

以下内容源于C语言中文网的学习与整理&#xff0c;非原创&#xff0c;如有侵权请告知删除。 前言 当源文件与 Makefile 文件的存放路径不同时&#xff0c;如何将源文件的路径告知Makefile文件呢&#xff1f; 方法有两种&#xff1a;一般搜索VPATH&#xff0c;选择搜索vpath。 两…

今天是我开通博客的第一天

The first time I regist my blog.转载于:https://www.cnblogs.com/binquan/p/3417169.html

mysql导入sql文件过大或连接超时的解决办法

原文:mysql导入sql文件过大或连接超时的解决办法 前段时间出差在现场开发的时候&#xff0c;导入数据库老是出问题。最后发现了一个神奇sql语句交给实施&#xff0c;只要导入出错就把如下语句执行就可以了。至今屡试不爽。 set global max_allowed_packet100 000 000; set glob…

Makefile中的条件判断

以下内容源于C语言中文网的学习与整理&#xff0c;非原创&#xff0c;如有侵权请告知删除。 日常使用 Makefile 编译文件时&#xff0c;可能会遇到需要分条件执行的情况。比如在一个工程文件中可编译的源文件很多&#xff0c;但是它们的类型是不相同的&#xff0c;所以编译文件…

SSH框架介绍

SSH 为 strutsspringhibernate的一个集成框架&#xff0c;是目前较流行的一种Web应用程序开源框架。 定义 集成SSH框架的系统从职责上分为四层&#xff1a;表示层、业务逻辑层、数据持久层和域模块层&#xff0c;以帮助开发人员在短期内搭建结构清晰、可复用性好、维护方便的We…

Find Minimum in Rotated Sorted Array

Suppose a sorted array is rotated at some pivot unknown to you beforehand. (i.e., 0 1 2 4 5 6 7 might become 4 5 6 7 0 1 2). Find the minimum element. You may assume no duplicate exists in the array. 思路&#xff1a;如果中间节点的值最大&#xff0c;则取后半…

Makefile的伪目标

以下内容源于C语言中文网的学习与整理&#xff0c;非原创&#xff0c;如有侵权请告知删除。 伪目标&#xff0c;它的目的并不是创建目标文件&#xff08;所以称作“伪”&#xff09;&#xff0c;而是想去执行这个目标下面的命令。它有点像汇编语言里的标签。 使用伪目标的原因&…

Makefile中的文件包含

以下内容源于C语言中文网的学习与整理&#xff0c;非原创&#xff0c;如有侵权请告知删除。 Makefile 中包含其他的文件&#xff0c;使用的关键字是 "include"。 make 读取到 "include" 关键字时&#xff0c;会暂停读取当前的 Makefile&#xff0c;转去读取…

Eclipse高级使用技巧

1&#xff0e; Eclipse的配置文件导入和导出功能 说明&#xff1a;可以将Eclipse的自定义的工作空间配置文件导出和导入&#xff0c;这样创建多工作空间时候就省去了再设置的烦恼。 2&#xff0e; Eclipse设置显示行号 说明&#xff1a;设置文件现实行号&#xff0c;调试错误的…

hadoop hive 的安装问题

origin: http://blog.163.com/songyalong1117126/blog/static/1713918972014124481752/hadoop hive 的安装问题 2014-02-24 16:10:13| 分类&#xff1a; hadoop|举报|字号 订阅能了一下午终于把hive搞好了&#xff0c;其中出现很多的问题1、hadoop和hive的版本问题&#xff0…

熬之滴水成石:最想深入了解的内容--windows内核机制(6)

58 进程和线程&#xff08;3&#xff09; 说完进程再说说线程&#xff0c;线程相比于进程其实有更多可说的内容。首先实现线程调用的数据结构是个栈&#xff0c;该栈记录了调用方法的信息这里面也包括了函数调用及返回的地址。线程肯定是属于某个进程&#xff0c;其控制流可以访…

Google搜索技巧总结

http://blog.sciencenet.cn/blog-44407-229042.html转载于:https://www.cnblogs.com/aze-003/p/4105261.html

【linux】学习6

鸟哥13章的东西 shell script速度较慢&#xff0c;适合用于系统管理&#xff0c;但不适合处理大量数值运算 var$((运算内容)) 可以用来做变量的加减乘除求余运算 total$(($firstnum*$secnu)) declare -i total"$firstnum*$secnu" 上面两句功能一样&#xff0c;建议用…

Makefile嵌套执行make

概述 在一个大的工程文件中&#xff0c;不同的文件按照功能被划分到不同的模块中&#xff0c;每个模块可能都会有自己的编译顺序和规则。如果在一个 Makefile 文件中描述所有模块的编译规则&#xff0c;就会显得很杂乱&#xff0c;执行时也会很不方便。 如果在不同的模块中分别…

core--线程同步(内核模式)

什么是内核&#xff1f;windows操作系统为了更好的管理进程&#xff0c;线程&#xff0c;创建了很多数据结构&#xff0c;这些数据结构运行在windows的底层&#xff0c;并不开放给开发人员&#xff1b;所以开发人员称这些结构为内核&#xff0c;但是为了开发人员能够使用&#…

hive cli启动判断hadoop version的问题

测试环境的hive cli启动时报错&#xff1a;Unable to determine Hadoop version information.hive是一个shell:使用sh -x跟踪运行过程&#xff0c;可以看到其通过hadoop version获取hdfs的版本相关的代码如下&#xff1a;# Make sure were using a compatible version of Hadoo…

Makefile变量的高级用法:变量的替换引用、变量的嵌套使用

以下内容源于C语言中文网的学习与整理&#xff0c;非原创&#xff0c;如有侵权请告知删除。 我们之前已经学习过变量的定义和基本的赋值运算&#xff0c;我们可以更深入的了解一下变量的一些高级的用法。高级使用方法有两种&#xff1a;第一种是变量的替换引用&#xff0c;第二…

SAP Study Notes: BW Queriy-Variables(变量)

About Variable:1.Variable 是和InfoObject绑定的&#xff0c;可用于任何含有该IO的query中。2.Variable有以下几种类型&#xff1a;Characteristic&#xff1a;用于限制Char。 Text&#xff1a;用于在报表动态显示文本。 Hierarchy&#xff1a;用于限制Hierarchy。 Hieararchy…

Makefile中的通配符

以下内容源于C语言中文网的学习与整理&#xff0c;非原创&#xff0c;如有侵权请告知删除。 Makefile 是可以使用 shell 命令的&#xff0c;所以 shell 支持的通配符在 Makefile 中也是同样适用的。 shell 中使用的通配符有&#xff1a;"*"&#xff0c;"?&qu…

SCCM2012 R2集成WSUS服务器-4:部署软件更新组

在之前的文章中&#xff0c;我们已经创建好的软件更新组&#xff0c;也下载好了补丁&#xff0c;下面我们来部署这些补丁。右击软件更新组&#xff0c;选择”部署“&#xff0c;如图。进入到部署软件更新向导&#xff0c;输入部署的名称&#xff0c;并指定部署的集合。如图。在…