文件名称:变量中的变量-算法引论:一种创造性方法---高清版
文件大小:964KB
文件格式:PDF
更新时间:2024-06-23 16:09:21
Makefile 陈皓
二、变量中的变量 在定义变量的值时,我们可以使用其它变量来构造变量的值,在 Makefile 中有两种方 式来在用变量定义变量的值。 先看第一种方式,也就是简单的使用“=”号,在“=”左侧是变量,右侧是变量的值,右侧 变量的值可以定义在文件的任何一处,也就是说,右侧中的变量不一定非要是已定义好的值, 其也可以使用后面定义的值。如: foo = $(bar) bar = $(ugh) ugh = Huh? all: echo $(foo) 我们执行“make all”将会打出变量$(foo)的值是“Huh?”( $(foo)的值是$(bar), $(bar)的值是$(ugh),$(ugh)的值是“Huh?”)可见,变量是可以使用后面的变量来定义的。 这个功能有好的地方,也有不好的地方,好的地方是,我们可以把变量的真实值推到后 面来定义,如: CFLAGS = $(include_dirs) -O include_dirs = -Ifoo -Ibar 当“CFLAGS”在命令中被展开时,会是“-Ifoo -Ibar -O”。但这种形式也有不好的地 方,那就是递归定义,如: CFLAGS = $(CFLAGS) -O 或: A = $(B) B = $(A) 这会让 make 陷入无限的变量展开过程中去,当然,我们的 make 是有能力检测这样的定 义,并会报错。还有就是如果在变量中使用函数,那么,这种方式会让我们的 make 运行时 非常慢,更糟糕的是,他会使用得两个 make 的函数“wildcard”和“shell”发生不可预知 的错误。因为你不会知道这两个函数会被调用多少次。 为了避免上面的这种方法,我们可以使用 make 中的另一种用变量来定义变量的方法。 这种方法使用的是“:=”操作符,如: 第 32 页共 78 页 2005 年 10 月 14 日整理:祝冬华