zoukankan      html  css  js  c++  java
  • makefile之变量赋值

    makefile中变量赋值有4种方法:

              = ,   := ,  += ,  ?=

       :直接赋值

          变量 = 值

      :=   :位置相关赋值

          如果右值为一个值,那么它和=没区别,如果右值为变量,那么左边变量的值等于右边变量当前位置的值,什么意思呢?

    a = abc
    b = $(a)
    a = jkl
    
    all:
    	@echo $(b)
    	
    .PHONY:all
    

     执行这个makefile,输出 b的值为jkl,  在 b = $(a) 这句中,变量a的值被延迟展开,即由变量a最后一条赋值语句 a = jkl 决定。如果b赋值时采用 :=,则情况就不同了:

    a = abc
    b := $(a)
    a = jkl
    
    all:
    	@echo $(b)
    	
    .PHONY:all
    

     此时输出b的值为abc, 它的意思就是获得当前位置变量 a的值赋值给b。

      ?=  :询问左边变量是否定义过,即是否使用过赋值操作,没有则赋值,否则忽略。注意是是否定义过,而不是是否为空值,并且还要注意空值不等于空格,tab键等。

          这里扯到赋空格,怎么符空格?或者tab

    spacevalue=空格/tab#
    

          需要注意的是#注释符是必须的,此时spacevalue的值就是赋值符=后面开始至#前这段,关于注释符有个陷阱, 假设定义一个变量dir,给它赋值一个路径

    dir =/home/thomas  #xx的路径
    

         这是由于变量赋值时,赋值号左右两边的空格,tab都将忽略,是从第一个非空格,非tab到最后一个非空格,非tab结束,除非遇到注释符,否则到注释符才算结束。

      +=  :追加赋值

      

      一个变量最终的值由上述赋值操作按照规则逐一计算决定

      

  • 相关阅读:
    BZOJ 1492 [NOI2007]货币兑换Cash
    BZOJ 2285 [Sdoi2011]保密
    BZOJ 2962 序列操作
    BZOJ 3197 [Sdoi2013]assassin
    BZOJ 3131 [Sdoi2013]淘金
    BZOJ 3532 [Sdoi2014]Lis
    BZOJ 1923 [Sdoi2010]外星千足虫
    BZOJ 4855 [Jsoi2016]轻重路径
    BZOJ 4289 PA2012 Tax
    微信开发之 微信支付
  • 原文地址:https://www.cnblogs.com/thammer/p/5554859.html
Copyright © 2011-2022 走看看