result:=
all :
$(result) = $(subst a,A,how are you,china?)
echo -n "the result is:"
echo $(result)
.PHONY: all
运行make命令后显示如下:
= how Are you,chinA?
/bin/sh: =: not found
make: *** [all] Error 127
是不是有什么库没安装呢?
makefile简单问题
-
- 帖子: 1
- 注册时间: 2009-03-25 20:45
- iceway
- 帖子: 33
- 注册时间: 2007-10-15 9:08
- 来自: Xiamen, China
Re: makefile简单问题
你的脚本需要修改:
result:=
result = $(subst a,A,"how are you,china?")
all :
[tab]echo -n "the result is:"
[tab]echo $(result)
.PHONY: all
首先, 注意红色部分, 是给变量赋值, 而不是给变量的值赋值, 所以赋值语句不能写$(result)为左值...
其次, makefile中所有的目标之后命令需要以tab开始, 我在论坛上打不出tab字符, 所以用蓝色的[tab]代替, 实际使用时需要替换成tab键.
第三, 使用makefile的函数时要注意参数的写法, 函数参数以逗号分隔, 你的第三个参数包含空格和逗号, 所以要用引号括起来.
最后, 目标之后应该跟上命令, 你之前写脚本result = $(subst a,A,"how are you,china?")在目标all之后, 如果不加tab, 这条语句之后的命令echo会出错, 如果加上tab, make会将该语句当做一个shell命令执行, 那么shell的赋值语句, 左值和等号以及右值之间不应该有空格存在, 所以也会出错, 必须改成result=$(subst a,A,"how are you,china?"), 去掉等号两边的空格, 但是这样修改的又不是该makefile内部的变量result, 所以即使更改输出的也是空.
你可以把赋值语句放在目标all之外, 如上, 这样就可以实现你的要求, 如果你的result需要在all目标被执行前才赋值, 那么脚本可以写成如下形式(目标命令之前加上@, 可以禁止输出命令语句本身, 只是输出命令结果):
注意: result = $(subst a,A,"how are you,china?")语句之前没有tab, 因为这不是一个目标要执行的命令, 只是makefile里的一个赋值语句.
result=
all : all_pre
@echo -n "the result is:"
@echo $(result)
all_pre :
result = $(subst a,A,"how are you,china?")
.PHONY: all
另外, 最好不要使用.PHONY来声明all, 因为.PHONY说明其后的是一个伪目标, 你的文件只有一个目标, 那就应该不是伪目标...
(以上只是个人理解, 如果有什么不对, 望指出...)
result:=
result = $(subst a,A,"how are you,china?")
all :
[tab]echo -n "the result is:"
[tab]echo $(result)
.PHONY: all
首先, 注意红色部分, 是给变量赋值, 而不是给变量的值赋值, 所以赋值语句不能写$(result)为左值...
其次, makefile中所有的目标之后命令需要以tab开始, 我在论坛上打不出tab字符, 所以用蓝色的[tab]代替, 实际使用时需要替换成tab键.
第三, 使用makefile的函数时要注意参数的写法, 函数参数以逗号分隔, 你的第三个参数包含空格和逗号, 所以要用引号括起来.
最后, 目标之后应该跟上命令, 你之前写脚本result = $(subst a,A,"how are you,china?")在目标all之后, 如果不加tab, 这条语句之后的命令echo会出错, 如果加上tab, make会将该语句当做一个shell命令执行, 那么shell的赋值语句, 左值和等号以及右值之间不应该有空格存在, 所以也会出错, 必须改成result=$(subst a,A,"how are you,china?"), 去掉等号两边的空格, 但是这样修改的又不是该makefile内部的变量result, 所以即使更改输出的也是空.
你可以把赋值语句放在目标all之外, 如上, 这样就可以实现你的要求, 如果你的result需要在all目标被执行前才赋值, 那么脚本可以写成如下形式(目标命令之前加上@, 可以禁止输出命令语句本身, 只是输出命令结果):
注意: result = $(subst a,A,"how are you,china?")语句之前没有tab, 因为这不是一个目标要执行的命令, 只是makefile里的一个赋值语句.
result=
all : all_pre
@echo -n "the result is:"
@echo $(result)
all_pre :
result = $(subst a,A,"how are you,china?")
.PHONY: all
另外, 最好不要使用.PHONY来声明all, 因为.PHONY说明其后的是一个伪目标, 你的文件只有一个目标, 那就应该不是伪目标...
(以上只是个人理解, 如果有什么不对, 望指出...)