首页 > 电脑软件 > 正文

奇幻城国际娱乐

2015-05-31 出处:网络 整理:sesligaranti.com

延伸:linux命令大全之crontab命令使用详解
描述:...度的配置文件。/etc/crontab文件包括下面几行:代码如下:前四行是用来配置crond任务运行的环境变量,第一行SHELL变量指定了系统要使用哪个shell,这里是bash,第二行PATH变量指定了系统执行命令的路径,第三行MAILTO变量指定了crond的任务执行信息将通过电子邮件发送给root用户,如果MAILTO变量

主题:Linux中的自动化变量

Linux中的自动化变量

模式规则中,规则的目标和依赖文件名代表了一类文件名;规则的命令是对所有这一类文件重建过程的描述,显然,在命令中不能出现具体的文件名,否则模式规则失去意义。那么在模式规则的命令行中该如何表示文件,将是本小节的讨论的重点。

假如你需要书写一个将.c文件编译到.o文件的模式规则,那么你该如何为gcc书写正确的源文件名?当然了,不能使用任何具体的文件名,因为在每一次执行模式规则时源文件名都是不一样的。为了解决这个问题,就需要使用自动环变量,自动化变量的取值是根据具体所执行的规则来决定的,取决于所执行规则的目标和依赖文件名。

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

$#

表示规则的目标文件名。如果目标是一个文档文件(Linux中,一般称.a文件为文档文件,也称为静态库文件),那么它代表这个文档的文件名。在多目标模式规则中,它代表的是哪个触发规则被执行的目标文件名。

$%

当规则的目标文件是一个静态库文件时,代表静态库的一个成员名。例如,规则的目标是foo.a(bar.o),那么,$%的值就为bar.o,$#的值为foo.a。如果目标不是静态库文件,其值为空。

$

规则的第一个依赖文件名。如果是一个目标文件使用隐含规则来重建,则它代表由隐含规则加入的第一个依赖文件。

$?

所有比目标文件更新的依赖文件列表,空格分割。如果目标是静态库文件名,代表的是库成员(.o文件)。

$^

规则的所有依赖文件列表,使用空格分隔。如果目标是静态库文件,它所代表的只能是所有库成员(.o文件)名。一个文件可重复的出现在目标的依赖中,变量$^只记录它的一次引用情况。就是说变量$^会去掉重复的依赖文件。

$+

类似$^,但是它保留了依赖文件中重复出现的文件。主要用在程序链接时库的交叉引用场合。

$*

在模式规则和静态模式规则中,代表茎。茎是目标模式中%所代表的部分(当文件名中存在目录时,茎也包含目录(斜杠之前)部分)。例如:文件dir/a.foo.b,当目标的模式为a.%.b时,$*的值为dir/a.foo。茎对于构造相关文件名非常有用。

自动化变量$*需要两点说明:

1 对于一个明确指定的规则来说不存在茎,这种情况下$*的含义发生改变。此时,如果目标文件名带有一个可识别的后缀,那么$*表示文件中除后缀以外的部分。例如:foo.c则$*的值为:foo,因为.c是一个可识别的文件后缀名。GUN make对明确规则的这种奇怪的处理行为是为了和其它版本的make兼容。通常,在除静态规则和模式规则以外,明确指定目标文件的规则中应该避免使用这个变量。

2 当明确指定文件名的规则中目标文件名包含不可识别的后缀时,此变量为空。

自动化变量$?在显式规则中也是非常有用的,使用它规则可以指定只对更新以后的依赖文件进行操作。例如,静态库文件libN.a,它由一些.o文件组成。这个规则实现了只将更新后的.o文件加入到库中:

lib: foo.o bar.o lose.o win.o

ar r lib $?

以上罗列的自动化变量中。其中有四个在规则中代表文件名($#、$、$%、$*)。而其它三个的在规则中代表一个文件名列表。GUN make中,还可以通过这七个自动化变量来获取一个完整文件名中的目录部分和具体文件名部分。在这些变量中加入D或者F字符就形成了一系列变种的自动环变量。这些变量会出现在以前版本的make中,在当前版本的make中,可以使用dir或者notdir函数来实现同样的功能。

$(#D)

表示目标文件的目录部分(不包括斜杠)。如果$#是dir/foo.o,那么$(#D)的值为dir。如果$#不存在斜杠,其值就是.(当前目录)。注意它和函数dir的区别!

$(#F)

目标文件的完整文件名中除目录以外的部分(实际文件名)。如果$#为dir/foo.o,那么$(#F)只就是foo.o。$(#F)等价于函数$(notdir $#)。

$(*D)

$(*F)

分别代表目标茎中的目录部分和文件名部分。

$(%D)

$(%F)

当以如archive(member)形式静态库为目标时,分别表示库文件成员member名中的目录部分和文件名部分。它仅对这种形式的规则目标有效。

$(

$(

分别表示规则中第一个依赖文件的目录部分和文件名部分。

$(^D)

$(^F)

分别表示所有依赖文件的目录部分和文件部分(不存在同一文件)。

$(+D)

$(+F)

分别表示所有依赖文件的目录部分和文件部分(可存在重复文件)。

$(?D)

$(?F)

分别表示被更新的依赖文件的目录部分和文件名部分。

在讨论自动化变量时,为了和普通变量(如:CFLAGS)区别,我们直接使用了$的形式。这种形式仅仅是为了和普通变量进行区别,没有别的目的。其实对于自动环变量和普通变量一样,代表规则第一个依赖文件名的变量名实际上是,我们完全可以使用$()来替代$。但是在引用自动化变量时通常的做法是$,因为自动化变量本身是一个特殊字符。

GUN make同时支持Sysv特性,允许在规则的依赖列表中使用特殊的变量引用
    (一般的自动化变量只能在规则的命令行中被引用)$$#、$$(#D)和$$(#F)(注意:要使用$$),它们分别代表了目标的完整文件名、目标文件名中的目录部分和目标的实际文件名部分。这三个特殊的变量只能用在明确指定目标文件名的规则中或者是静态模式规则中,不用于隐含规则中。另外Sysv make和GNU make对规则依赖的处理也不尽相同。Sysv make对规则的依赖进行两次替换展开,而GUN make对依赖列表的处理只有一次,对其中的变量和函数引用直接进行展开。

自动化变量的这个古怪的特性完全是为了兼容Sysv 版本的makefile文件。在使用GNU make时可以不考虑这个,也可以在Makefile中使用伪目标.POSIX来禁止这一特性。

注:更多精彩教程请关注电 脑教程栏目,电脑办公群:189034526欢迎你的加入

分享给小伙伴们:

相关推荐

    linux命令大全之crontab命令使用详解主题:linux命令大全之crontab命令使用详解
    描述:...度的配置。/etc/crontab包括下面几行:码如下:前四行是用来配置crond任务运行的环境变量,第一行SHELL变量指定了系统要使用哪个shell,这里是bash,第二行PATH变量指定了系统执行命令的路径,第三行MAILTO变量指定了crond的任务执行将通过电子发送给root,如果MAILTO变量
    linux系统命令make、clean的用法讲解主题:linux系统命令make、clean的用法讲解
    描述:... makefile就像一个Shell脚本一样,其中也可以执行作系统的命令。 makefile带来的好处就是--“自动编译”,一旦写好,只需要一个make命令,整个工程完全自动编译,极大的提高了软件开发的效率。make是一个命令工具,是一个解释makefile中指令的命令工具,一般来说,大多数的IDE都有这个命令,:Delphi的make,Visual C++的nmake,Linux下GNU的make.可见,makefile都成为了一种在工程...
    Linux read命令和使用实例主题:Linux read命令和使用实例
    描述:...输入(键盘)的输入,或者其他描述符的输入。得到输入后,read命令将数据放入一个标准变量中。二、使用举例(这里仅列出一些常用的选项)1.基本读取码如下:其等效于以下:码如下:在上面read后面的变量只有name一个,也可以有多个,这时如果输入多个数据,则第一个数据给第一个变量,第二个数据给第二个变量。如果输入数据个数过多,则最后剩下的所有值都给最...
    linux命令大全之grep命令详解文本搜索工具主题:linux命令大全之grep命令详解文本搜索工具
    描述:...果搜索不成功,则返回1,如果搜索的不存在,则返回2。我们利用这些返回值就可进行一些自动的文本处理。1.命令格式:码如下:2.命令功能:用于过滤/搜索的特定字符。可使用正则表达式能多种命令配合使用,使用上十分灵活。3.命令参数:-a --text #不要忽略二进制的数据。 -A<显示行数> --after-context=<显示行数> #除了显示符合范本样式的那一列之外,...
    歌火力全开!安卓5主题:歌火力全开!安卓5
    描述:...,以对抗Android碎片化现象,同时,Lollipop还展现出Google对级移动场新的远景:智能化、自动。更的系统机制大家都知道Android系统基于Linux开发,但可能没有多少人了解Lollipop基于SELinux。SELinux,全称为Security-Enhanced Linux,是Linux有史以来上最杰出的全子系统。它在权限控制的远远超过Linux和unix。Google希望利用这个的系统消除人们对于Android...
    Linux Vi器的使用方法主题:Linux Vi器的使用方法
    描述:一、centOS下vi高亮显示 首先,vim才有语法高亮的功能,配置在/etc/vim/vimrc 1、vi自动转为vim /etc/profile最后加上 alias vi='vim' 2、语法高亮vi /etc/vim/vimrc 查看 syntax on 是打开的 3、加上环境变量设置 vi /etc/profile环境变量设置部分加上 export TERM=xterm-color 4、重启器

相关讨论

相关文章

搞笑图片