标题: 请教:Makefile的执行顺序问题
飞雪横天
新生入学
Rank: 1
注册用户



UID 119573
精华 0
积分 0(积分有什么用?)
帖子 3
阅读权限 10
注册 2005-4-28
状态 离线
发表于 2007-11-1 10:04  资料  个人空间  短消息  加为好友 
请教:Makefile的执行顺序问题

我对Makefile的机制不熟悉, 今天碰到一个奇怪的现象:
5r]L}Q4]8N&Cwww.linuxeden.com写个简单的Makefile文件描述如下:

.PHONE: all

all:
    @echo "Creating so files"
    -@rm -rf demo
    -@mkdir demo
    -@cp -rf /usr/lib/libX*.so demo
    -@for i in $(shell find ./demo -name libX*.so); do echo $$i; done

假设我的/usr/lib目录下有以下文件: libX11.a,libX11.so,libX11.so.6,libX11.so.6.2www.linuxeden.com$Ca5Tp's

hD{I
h6fy)}www.linuxeden.com
按道理说, 应该打印出类似于下面的结果:
-IH!i$g
b#A
Create so files I(e5\s+Vkr
libX11.so
E(nmJL[H
f

*aM9K]b5I;YY$E7q~
p

但是实际上打印出来的是:
Z \I$f1E"nwww.linuxeden.comfind: ./demo: No such file or directoryLinux伊甸园论坛:VzcD*MoOkJ
Creating so files)L9rL:m&|D
从表面上看来, 应该是-@for循环与-@mkdir同时执行才造成这种情况, 难道Makefile3h1G{~2p&vIMF9P
不是单步执行的么? 如果是同时fork的话, 该如何禁止这种情况发生呢?www.linuxeden.comv^;}s1N*C8{
Linux伊甸园论坛5U,y-L"MT)Ili
谢谢大家了. Y"dv\5V
q/ab

;a`]cM5t9ig1}
[ 本帖最后由 飞雪横天 于 2007-11-1 11:48 编辑 ]

顶部
不容错过的IBM 集群技术资源汇总
flag
版主
Rank: 7Rank: 7Rank: 7
版主



UID 19801
精华 1
积分 28(积分有什么用?)
帖子 5581
阅读权限 100
注册 2002-7-19
状态 离线
发表于 2007-11-1 10:23  资料  个人空间  短消息  加为好友 
肯定是单步执行的,问题是执行命令都会有时延,特别是文件操作,而且find是出错信息先输出也是正常的。
0d{@;Iz0`!K6a不过这里www.linuxeden.com&Vw#x/e([a `
    -@for i in $(shell find ./demo -name libX*.so); do echo $$i; doneAD$q[L0]5F
改成-@for i in ·find ./demo -name libX*.so·; do echo $$i; done
;g(zG6kE!NT似乎就可以避免了,应该是这个in $()导致find先被解释了吧。。。。。
:lZL4`n5uhxwww.linuxeden.comLinux伊甸园论坛
S9E w BU$O/E$MB2g6y

[ 本帖最后由 flag 于 2007-11-1 10:34 编辑 ]





上帝说,有问题,找GOOGLE 写程序是很神圣的事情!同样只是装系统,卖菜的大娘会的事情不见得就跟卖菜一样了。
顶部
不容错过的IBM 集群技术资源汇总
飞雪横天
新生入学
Rank: 1
注册用户



UID 119573
精华 0
积分 0(积分有什么用?)
帖子 3
阅读权限 10
注册 2005-4-28
状态 离线
发表于 2007-11-1 16:30  资料  个人空间  短消息  加为好友 
谢谢版主, 修改之后makefile的解释的确正确了.
D4jbvZ-g;a/X-` co但是却打印出"find ./demo -name libX*.so"这条语句了, 我不管怎么修改还是出现这句话, 不知如何处理?d2w$sz&eZP
单步执行, 难道不是等上一步执行完成之后才执行下一句么? 这是否和Makefile的执行机制有关呢?Linux伊甸园论坛~ i~z8u$pN3j d-G^
www.linuxeden.com9ICm9@N_f
我今天登陆了一天论坛, 在windows下老是提示验证码错误, 怎么回事呢?  在linu**沼诘锹缴侠戳?.www.linuxeden.com[3v@
Z4hS

(@(HN#e3Q.l(s!g
谢谢

顶部
不容错过的IBM 集群技术资源汇总
flag
版主
Rank: 7Rank: 7Rank: 7
版主



UID 19801
精华 1
积分 28(积分有什么用?)
帖子 5581
阅读权限 100
注册 2002-7-19
状态 离线
发表于 2007-11-1 21:35  资料  个人空间  短消息  加为好友 
打印出?我这里没有,不知道你是什么系统,我的是Redhat 9





上帝说,有问题,找GOOGLE 写程序是很神圣的事情!同样只是装系统,卖菜的大娘会的事情不见得就跟卖菜一样了。
顶部
飞雪横天
新生入学
Rank: 1
注册用户



UID 119573
精华 0
积分 0(积分有什么用?)
帖子 3
阅读权限 10
注册 2005-4-28
状态 离线
发表于 2007-11-2 09:43  资料  个人空间  短消息  加为好友 
.PHONE: all
n        [k        WnTL1i"x
FR E s T#@!n0dwww.linuxeden.comall:g8Z\4};V#n
        @echo "Creating so files"
2P'n3Ji?n,WZQ"xI        -@rm -rf demo        i)k$i#O!tt3m4lLwN
        -@mkdir demo
M4T@7X)\4ZY1m$kGB        -@cp -rf /usr/lib/libX*.so demo
4f'E_yU/awww.linuxeden.com        -@for i in 'find ./demo -name libX*.so'; do echo $$i; doneLinux伊甸园论坛5`!K!S$hG
S4Loe

*E;oN5T.v
i have run this makefile in redhat9, but also get the same result:
)E K$V:R2{.kGtD
Gd3ILinux伊甸园论坛
Creating so files
1?%h
{'^1z*[v/r
find ./demo -name libX*.so
9ZF(^-IfgjLinux伊甸园论坛
2Q:QU&~zs
@@;z
why? Is your makefile the same as mine?
        q@        ^4q1\-r/xLinux伊甸园论坛
k$C[&f:`;b        sRLinux伊甸园论坛thanks

顶部
不容错过的IBM 集群技术资源汇总
 



当前时区 GMT+8, 现在时间是 2008-5-17 04:45

    Powered by Discuz! 5.5.0  © 2001-2007 Comsenz Inc.
Processed in 0.205241 second(s), 5 queries

清除 Cookies - 联系我们 - Linux伊甸园 - Archiver - WAP