为何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 ;了呢?

...全文
124 点赞 收藏 6
写回复
6 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
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)来得到的。
回复
相关推荐
发帖
Linux_Kernel
创建于2007-08-27

4151

社区成员

Linux/Unix社区 内核源代码研究区
申请成为版主
帖子事件
创建了帖子
2010-09-20 11:48
社区公告
暂无公告