Chinaunix首页 | 论坛 | 博客
  • 博客访问: 5493968
  • 博文数量: 922
  • 博客积分: 19333
  • 博客等级: 上将
  • 技术积分: 11226
  • 用 户 组: 普通用户
  • 注册时间: 2007-03-27 14:33
文章分类

全部博文(922)

文章存档

2023年(1)

2020年(2)

2019年(1)

2017年(1)

2016年(3)

2015年(10)

2014年(17)

2013年(49)

2012年(291)

2011年(266)

2010年(95)

2009年(54)

2008年(132)

分类: LINUX

2011-11-14 13:52:11

对于makefile,在规则命令中写shell的分支容易出错,可以这样:
#######以下是Makefile内容
  1 all:
  2     @cd mydir && pwd
  3     @cd mydir && echo $(PWD)
  4     @cd mydir && echo $$PWD
  5     @cd mydir && ./myset.sh
  6     @[ -f testfile ] && echo have good! || cd mydir && ./myset.sh
  7     @#[ -f good ] && echo have good! || cd mydir && ./myset.sh
  8     @if [ -f good ];then \
  9         echo have good! \
 10         ;echo have good! \
 11     ;else\
 12         cd mydir && ./myset.sh \
 13     ;fi
 14     @if [ -f testfile ];then \
 15         echo have good! \
 16     ;else\
 17         cd mydir && ./myset.sh \
 18     ;fi
 19     @[ -f good ] && echo good
 20     @[ -f testfile ] && echo good || :
#######以上是Makefile内容
运行以上makefile输出如下:
[root@quietheart make]# make
/root/test/make/mydir
/root/test/make
/root/test/make/mydir
hello!
hello!
have good!
have good!
hello!
good
这里,假设当前文件下实际有"good"没有"testfile"。需要注意的是,
第7行是错误的逻辑,在good存在的时候会提示找不到./myset.sh命令,所以用8-12行的if方式修正了。
第10行表示在一个分支中使用多条命令的话,需要以';'开始,否则由于续行表示与上面在一行,成了上一个命令参数了。
第19行实际是不正确的写法,尽管因为存在"good",所以正确地输出了,但是如果没有"good"将会报错!
第20行,修正了18行的写法,当没有"testfile"文件时,执行"||"后面的":"也就是空命令。如果没有"||:"这里就会报错。

阅读(2603) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~