【背景】
折腾:
期间,用:
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
转载请注明:在路上 » 【已解决】makefile运行出错:/bin/sh: -c: line 0: syntax error near unexpected token `(‘,以及makefile中如何调用内置函数