makefile中一定要注意的细节

<1>注意事项:不要在条件表达式中使用自动变量。

看下面这个makefile文件。

 

test :
ifeq ($@,test)
      echo "test"
else
      echo "no test"
endif

 

结果依然出乎意料:

echo "no test"
no test

 

原因:在makefile文件被读取时就已经开始计算条件表达式的值了,而自动变量$@的值是在make运行时才计算出来地。

 

<2>注意事项:定义变量时,要注意值后面的空格是不是自己所需要的。

例:

 

#下面这句a b c   后面有三个空格,这个很容易被忽略。

foo := a b c   

 

test:

     echo #$(foo)#

 

结果是:#a b c   #

 

<3>注意事项:函数表达式中,函数名部分不能使用变量。

例:

func := sort

 

bar := b d e a c f

foo := $($(func) $(bar))

 

test :

       echo $(foo)

本以为结果是:a b c d e f

出乎意料的是,结果如下:

echo

 

原因:(目前还未找到资料明确指示函数名部分不能用变量)

 

<4>注意事项:在函数参数中有逗号和空格时,最好用变量代替。

例:

empty :=

space := $(empty) $(empty)

comma := ,

 

bar := a b c d e f

val := $(subst $(space),$(comma),$(bar))

 

test :

         echo $(val)

 

结果:

a,b,c,d,e,f

 

<5>注意事项:在函数参数中,除了第一个参数前面可以有空格,其余参数前后,除了自己有需要,最好不要留空格。

例:

empty :=

space := $(empty) $(empty)

comma := ,

 

bar := a b c d e f

val := $(subst $(space),  $(comma)  ,  $(bar)  )       #这里,$(comma)和$(bar)前后都多了两个空格。

 

test :

         echo $(val)

 

结果:

echo   ,    ,  a  ,  b  ,  c  ,  d  ,  e  ,  f  ,    , 
, , a , b , c , d , e , f , ,

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值