<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 , ,