usdark 发表于 2014-07-14 14:23

请求帮忙解释下下面makefile的含义

BINARY_PREREQS = bin/.dummy

bin/.dummy:
        @if (: >> $@ || : > $@) >/dev/null 2>&1; then :; else \
          dir=bin $(MAKEDIR); fi
        @: >> $@ || : > $@ # what a fancy emoticon!

请求解释下整段内容,尤其是   : >> $@ || : > $@是什么意思?

流氓无产者 发表于 2014-07-15 09:48

我的理解: :>>$@,看文件是否存在
:>$@,清空文件

usdark 发表于 2014-07-16 17:30

你好,能具体解析一下为什么这么理解嘛。麻烦了

qxhgd 发表于 2014-07-16 17:53

找本makefile的书看下吧

尽量不帅气 发表于 2014-08-06 10:19

和makefile无关吧,这应该是一堆正则表达式

MMMIX 发表于 2014-08-06 14:11

尽量不帅气 发表于 2014-08-06 10:19 static/image/common/back.gif
和makefile无关吧,这应该是一堆正则表达式

这是 Shell 脚本,和正则没有关系。

MMMIX 发表于 2014-08-06 14:12

qxhgd 发表于 2014-07-16 17:53 static/image/common/back.gif
找本makefile的书看下吧

楼主理解不了的东西基本和 Makefile 无关,都是些 shell 的东西。

MMMIX 发表于 2014-08-06 14:23

回复 2# 流氓无产者


    || 后面的部分看起来有点多余。至少在 bash 下,空命令 `:` 始终返回成功。

MMMIX 发表于 2014-08-06 14:29

本帖最后由 MMMIX 于 2014-08-06 22:09 编辑

回复 1# usdark


`$@` 是 Makefile 变量,表示当前规则的目标;
`:` 是 shell 的空命令,始终返回成功;
`>` 和 `>>` 是 shell 的输出重定向语法,表示将标准输出写入/追加到后面的文件中;
`||` 是 shell 的操作符,和 C 的 || 作用类似,左边的表达式返回失败,才执行右边的表达式。

在 `: >> $@ || : > $@` 中,`|| : > $@` 看起来有点多余,因为前面的 `: >> $@` 始终会返回成功。

super皮波 发表于 2014-08-06 15:35

回复 9# MMMIX
||好像是左边的只有失败才会执行右边的吧

   
页: [1] 2
查看完整版本: 请求帮忙解释下下面makefile的含义