为何makefile中执行的结果和直接在命令行中执行结果不一致?

清钟沁桐 2010-09-20 11:48:12

# makefile 文件内容:
test:
currentdir=`pwd`; echo ${currentdir}; pwd ; dir2=${currentdir%\/*}; echo ${dir2};

然后执行make显示如下:
zyd@HCC:~/projects/make> make test
currentdir=`pwd`; echo ; pwd ; dir2=; echo ;

/home/zyd/projects/make

zyd@HCC:~/projects/make>

明明这里的`pwd`不是为空,为什么 echo ${currentdir}; 就成了 echo ;了呢?

...全文
243 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
kabar_strider 2010-09-21
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 justkk 的回复:]

关键是makefile中的$需要转义,使用$$
test:
currentdir=`pwd`; echo $${currentdir}; pwd ; dir2=$${currentdir%\/*}; echo $${dir2};
[/Quote]
加了转义,执行过程中不能输出currentdir的值。楼主在此echo ${currentdir},应该是想输出currentdir的值吧。
kabar_strider 2010-09-21
  • 打赏
  • 举报
回复
“明明这里的`pwd`不是为空,为什么 echo ${currentdir}; 就成了 echo ;了呢?”

在显示第一行的时候,只是将要执行的命令显示出来但并没有执行,此时currentdir还没有被赋值,所以它是空的,输出就成了"echo"。
justkk 2010-09-21
  • 打赏
  • 举报
回复
关键是makefile中的$需要转义,使用$$
test:
currentdir=`pwd`; echo $${currentdir}; pwd ; dir2=$${currentdir%\/*}; echo $${dir2};
louyong0571 2010-09-21
  • 打赏
  • 举报
回复
楼上说到了,makefile里面的变量赋值和命令行是不一样的,要遵循makefile的语法
清钟沁桐 2010-09-21
  • 打赏
  • 举报
回复
是的,我本来想输出currentdir的值,看看这个值是否正确
我使用 dir2=${currentdir%\/*};的目的是希望将currentdir的值从后面截去最后的一个/后的内容
谭海燕 2010-09-21
  • 打赏
  • 举报
回复
不能直接用还命令。其实是有PWD这个产量的。即使没有,需要你通过$(shell pwd)来得到的。

4,465

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 内核源代码研究区
社区管理员
  • 内核源代码研究区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧