b2科目四模拟试题多少题驾考考爆了怎么补救
b2科目四模拟试题多少题 驾考考爆了怎么补救

makefile 语法_makefile 不同 后缀_makefile :(17)

电脑杂谈  发布时间:2017-04-11 03:08:34  来源:网络整理

dir := /foo/bar # directory to put the frobs in

dir这个变量的是“/foo/bar”,后面还跟了4个空,如果我们这样使用这样变量来指定别的目录——“$(dir)/file”那么就完蛋了。

还有一个比较有用的操作符是“?=”,先看示例:

FOO ?= bar

其含义是,如果FOO没有被定义过,那么变量FOO的就是“bar”,如果FOO先前被定义过,那么这条语将什么也不做,其等价于:

ifeq ($(origin FOO), undefined)

FOO = bar

endif

这里介绍两种变量的高级使用方法,第一种是变量的替换。

我们可以替换变量中的共有的部分,其式是“$(var:a=b)”或是“${var:a=b}”,其意思是,把变量“var”中所有以“a”字串“结尾”的“a”替换成“b”字串。这里的“结尾”意思是“空”或是“结束符”。

还是看一个示例吧:

foo := a.o b.o c.o

bar := $(foo:.o=.c)

这个示例中,我们先定义了一个“$(foo)”变量,而第二行的意思是把“$(foo)”中所有以“.o”字串“结尾”全部替换成“.c”,所以我们的“$(bar)”的就是“a.c b.c c.c”。

另外一种变量替换的技术是以“静态模式”(参见前面章节)定义的,如:

foo := a.o b.o c.o

bar := $(foo:%.o=%.c)

这依赖于被替换字串中的有相同的模式,模式中必须包含一个“%”字符,这个例子同样让$(bar)变量的为“a.c b.c c.c”。

第二种高级用法是——“把变量的再当成变量”。先看一个例子:

x = y

y = z

a := $($(x))

在这个例子中,$(x)的是“y”,所以$($(x))就是$(y),于是$(a)的就是“z”。(注意,是“x=y”,而不是“x=$(y)”)

我们还可以使用更多的层次:

x = y

y = z

z = u

a := $($($(x)))

这里的$(a)的是“u”,相关的推导留给读者自己去做吧。

让我们再复杂一点,使用上“在变量定义中使用变量”的第一个方式,来看一个例子:

x = $(y)

y = z

z = Hello

a := $($(x))

这里的$($(x))被替换成了$($(y)),因为$(y)是“z”,所以,最终结果是:a:=$(z),也就是“Hello”。

再复杂一点,我们再加上函数:

x = variable1

variable2 := Hello

y = $(subst 1,2,$(x))

z = y

a := $($($(z)))

这个例子中,“$($($(z)))”扩展为“$($(y))”,而其再次被扩展为“$($(subst 1,2,$(x)))”。$(x)的是“variable1”,subst函数把“variable1”中的所有“1”字串替换成“2”字串,于是,“variable1”变成“variable2”,再取其,所以,最终,$(a)的就是$(variable2)的—— “Hello”。(喔,好不容易)

在这种方式中,或要可以使用多个变量来组成一个变量的名字,然后再取其:


本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-40627-17.html

相关阅读
    发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

    • 罗艺峰
      罗艺峰

      抗日得时候多少人抵制日货又能怎么样

    • 秦灵公
      秦灵公

      买到仿制假冒的了

    热点图片
    拼命载入中...