make变量名不能包含+?

时间:2014-10-23 16:20:21

标签: makefile gnu-make

似乎makefile变量不能包含+。我的环境:Ubuntu 14 LTS,GNU Make 3.81,bash。

G++=g++ -std=c++11
test: 
    $(G++) a.cpp -o a

test1:
    g++ -std=c++11 a.cpp -o a

make test1成功,而make test错误错误

make: aa.cpp: Command not found

我在" GNU make"书。

  
    

变量名称可以是不包含':','#','='或白色的任何字符序列。     空间。但是,变量名称包含字母,数字和字符以外的字符     应仔细考虑下划线,因为在某些外壳中它们不能通过     环境到子制作

  

1 个答案:

答案 0 :(得分:2)

不,这没关系。你的问题是make解析错误。

G++=echo
B++:=echo

test: 
    $(G++) a.cpp -o a

test1:
    echo a.cpp -o a

test2:
    $(G+) a.cpp -o a

test3:
    $(B++) a.cpp -o a

执行命令

$ make test
a.cpp -o a
make: a.cpp: Command not found
make: *** [test] Error 127
$ make test1
echo a.cpp -o a
a.cpp -o a
$ make test2
echo a.cpp -o a
a.cpp -o a
$ make test3
echo a.cpp -o a
a.cpp -o a

问题在于,将G++=echo视为G+ += echo而不是G++ = echo。修复方法是使用G++:=echo强制解析以查看:=或添加空格G++ =echo