【已解决】makefile运行出错:/bin/sh: -c: line 0: syntax error near unexpected token `(‘,以及makefile中如何调用内置函数

【背景】

折腾:

【已解决】makefile中把字符串转换为小写或大写

期间,用:

OS_NAME = $(shell uname -o)
LC_OS_NAME = lc($(OS_NAME))

checkcygwin:
	echo "OS_NAME=" $(OS_NAME)
	echo "LC_OS_NAME=" $(LC_OS_NAME)

去测试此处是否支持lc函数,结果出错:

Administrator@PC-20130611GART /cygdrive/e/Dev_Root/docbook/tools/docbook-xsl-ns-1.78.1/webhelp
$ make checkcygwin
echo "OS_NAME=" Cygwin
OS_NAME= Cygwin
echo "LC_OS_NAME=" lc(Cygwin)
/bin/sh: -c: line 0: syntax error near unexpected token `('
/bin/sh: -c: line 0: `echo "LC_OS_NAME=" lc(Cygwin)'
Makefile:65: recipe for target `checkcygwin' failed
make: *** [checkcygwin] Error 1

且同时,也要搞清楚,如何调用makefile中的内置函数。

是不是直接用xxx()就可以了。

 

【解决过程】

1.参考:

Functions for Transforming Text

去改为:

OS_NAME = $(shell uname -o)
LC_OS_NAME = $(lc $(OS_NAME))

checkcygwin:
	echo "OS_NAME=" $(OS_NAME)
	echo "LC_OS_NAME=" $(LC_OS_NAME)

结果是:

Administrator@PC-20130611GART /cygdrive/e/Dev_Root/docbook/tools/docbook-xsl-ns-1.78.1/webhelp
$ make checkcygwin
echo "OS_NAME=" Cygwin
OS_NAME= Cygwin
echo "LC_OS_NAME="
LC_OS_NAME=

好像是:

当前的make中不支持lc。

所以虽然可以运行:

$(lc $(OS_NAME))

结果却是空的。

 

【总结】

此处:

1.出现:

/bin/sh: -c: line 0: syntax error near unexpected token `(‘

的错误,是自己的make的语法写错了:

LC_OS_NAME = lc($(OS_NAME))

应该是:

LC_OS_NAME = $(lc $(OS_NAME))

2.make(当前是3.81版本)不支持lc内置函数。

3.makefile中调用内置函数的方式是:

$(funcName para…)

关于make中有哪些内置函数,以及每个函数的语法,参见:

Functions for Transforming Text



发表评论

电子邮件地址不会被公开。 必填项已用*标注

无觅相关文章插件,快速提升流量