当前时区为 UTC + 8 小时



发表新帖 回复这个主题  [ 2 篇帖子 ] 
作者 内容
1 楼 
 文章标题 : makefile简单问题
帖子发表于 : 2009-06-10 20:22 

注册: 2009-03-25 20:45
帖子: 1
送出感谢: 0 次
接收感谢: 0 次
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

是不是有什么库没安装呢?


页首
 用户资料  
 
2 楼 
 文章标题 : Re: makefile简单问题
帖子发表于 : 2009-06-12 15:33 
头像

注册: 2007-10-15 9:08
帖子: 33
地址: Xiamen, China
送出感谢: 0 次
接收感谢: 0 次
你的脚本需要修改:

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说明其后的是一个伪目标, 你的文件只有一个目标, 那就应该不是伪目标...

(以上只是个人理解, 如果有什么不对, 望指出...)


_________________
有些故事还没讲完, 那就算了吧;有些心情在岁月中, 已经难辨真假。
bitbybit.72pines.com


页首
 用户资料  
 
显示帖子 :  排序  
发表新帖 回复这个主题  [ 2 篇帖子 ] 

当前时区为 UTC + 8 小时


在线用户

正在浏览此版面的用户:没有注册用户 和 1 位游客


不能 在这个版面发表主题
不能 在这个版面回复主题
不能 在这个版面编辑帖子
不能 在这个版面删除帖子
不能 在这个版面提交附件

前往 :  
本站点为公益性站点,用于推广开源自由软件,由 DiaHosting VPSBudgetVM VPS 提供服务。
我们认为:软件应可免费取得,软件工具在各种语言环境下皆可使用,且不会有任何功能上的差异;
人们应有定制和修改软件的自由,且方式不受限制,只要他们自认为合适。

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
简体中文语系由 王笑宇 翻译