- 变量可以包含 字符、数字,下划线 (可以是数字开头),但 不 应该含有 “:”、“#”、“=”或是空字符 (空格、回车等)。变量是 大小写敏感 的.。推荐使用 大小写搭配 的变量名。
- 变量在声明时需要给予初值。“$”用“()”或“{}”或不加括号。要使用真实的“$”字符,用“$$”。变量只是 替代。
- 变量定义变量 :1.foo=$(foo1);foo1=gcc;使用的变量可以是 后面定义的。避免自己调用自己:foo=$(foo) -o;2.":="操作符:变量中 不可( 不起作用) 使用 后面定义 的变量;
- 系统变量“MAKELEVEL”: 嵌套使用make时当前Makefile的调用层数。
- 操作符是“?=”:先判断变量是否被定义过,是则什么也不做,否则定义之;
- 定义一个变量等于空格: nullstring :=
- space := $(nullstring) #这个“#”前有一个空格的;所以 定义一个路径是一定要注意。
- 替换变量中的共有的部分,其格式是“$(var:a=b)”或是“${var:a=b}”或者使用静态模式 $(foo:%.o=%.c)其中%是匹配符;
- 把变量的值再当成变量:x=y;y=z;$($(x));
- “+=”操作符给变量追加值, 前一次的是“:=”(或“=”),那么“+=”会以“:=”(或“=”)作为其 赋值符;
- 如果有 变量是通常make的 命令行参数设置的,那么Makefile中对这个变量的赋值会被 忽略。如果你想在Makefile中设置这类参数的值,使用“override”指示符。 对于 多行的变量定义 ,我们用define指示符,在define指示符前,也同样可以使用override指示符。
- 多行变量:define和endef;若定义的是变量,则记得加TAB键;
- 系统环境变量: 可以被载入到Makefile文件中,但是如果Makefile中 已定义 了这个变量,或是这个变量由make命令行带入,那么系统的环境变量的值将 被覆盖 。(如果make指定了“ -e ”参数,那么,系统环境变量将覆盖Makefile中定义的变量)。 嵌套调用时, 默认情况下,只有通过命令行设置的变量会被传递。makefile文件中可以使用export导出;
- 目标局部变量: 变量会作用到由这个目标所引发的所有的规则中去,不会影响规则链以外的全局变量的值。
- 模式变量:如 %.o:CFLAGS = -O;只针对.o文件为目标 有作用;
- 语法:ifdef/ifeq/ifneq/ifndef else endif; ifdef只是测试一个变量是否有值,其并 不会把变量扩展到当前位置 。
posted @
2012-03-19 13:19
flyfisher
阅读(
209)
评论()
收藏
举报