Makefile,

1.变量的引用方式:

  ”$(变量名)“或者”¥{变量名}“

  例如:

  ${Objs}就是取变量Objs的值

  注意:

  当变量名为单字符是可以采用:“$a”的方式引用,多字符则不行

2.变量定义的两种方法,即对变量进行赋值:

  (1)使用递归展开式变量“=”  左侧为变量名,右侧是变量的值,该方法的优点是右侧变量的值可以定义在文件的任何一处,也就是说,右侧中的变量不一定非要是已定义好的值,其也可以使用后        面定义的值。

  (2)使用直接展开式变量“:=”  使用“:=”定义变量时,变量值中对其他量或者函数的引用在定义变量时被展开(对变量进行替换)。所以变量被定义后就是一个实际需要的文本串,其中不再包含任何变量的引用。这种方法,前面的变量不能使用后面的变量,只能使用前面已定义好了的变量

3.“?=”操作符

  “?=”被称为条件赋值的赋值操作符:只有此变量在之前没有赋值的情况下才会对这个变量进行赋值

 

4.环境变量

  (1)系统环境变量可带入到执行make的Makefile文件中,但是如果make命令行加入变量或者是该变量已经在Makefile文件中定义,则系统环境变量将会被覆盖,如果make指定了“-e”参数,那么,系统环境变量将覆盖Makefile中定义的变量

  (2)如果我们在环境变量中设置了“CFLAGS”环境变量,那么我们就可以在所有的Makefile中使用这个变量了。这对于我们使用统一的编译参数有比较大的好处。如果Makefile中定义了CFLAGS,那么则会使用Makefile中的这个变量,如果没有定义则使用系统环境变量的值

当make递归调用时,上层Makefile中定义的变量会以系统环境变量的方式传递到下层的Makefile中。当然,默认情况下,只有通过命令行设置的变量会被传递。而定义在文件中的变量,如果要向下层 Makefile传递,则需要使用exprot关键字来声明。