LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1092|回复: 3

makefile简单问题

[复制链接]
发表于 2009-6-10 20:36:18 | 显示全部楼层 |阅读模式
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
发表于 2009-6-10 21:27:31 | 显示全部楼层
注意要使用
  1. ,make对tab符号很敏感。
  2. make实际执行的命令序列...
  3. [code]= how Are you,chinA?
  4. echo -n "the result is:"
  5. echo
复制代码
你机器里应该没有哪个命令叫“=”吧?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-6-10 21:32:29 | 显示全部楼层
谢谢你的答复,“注意要使用[code]”是什么意思啊?不好意思,你的意思是我缺了Tab键?
我的命令前是有Tab键的,我复制到这边发问的时候没有显示
回复 支持 反对

使用道具 举报

发表于 2009-6-11 09:34:49 | 显示全部楼层
Post by tongnaikun;1996359
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 中变量与一般脚本中的变量不一样, 它们更适合用宏替换的方式来理解. 楼主在 all: 的第一行中 '$(result) = ...' 是如何被处理的呢? 它就是替换成 '  = ...', 而不是按照楼主的期望,改变了 result 的值.

那么这种情况我们一般如何处理呢, 一般我们是用 shell 的环境变量来处理的


  1. all :
  2.         @RESULT="$(subst a,A,how are you,china?)"; \
  3.         echo -n "the result is:"; \
  4.         echo $$RESULT;

  5. .PHONY: all
复制代码


或者

  1. result := $(subst a,A,how are you,china?)

  2. all :
  3.         @echo -n "the result is:"
  4.         @echo $(result)

  5. .PHONY: all
复制代码
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表