【问题标题】:What Does This Script Do?这个脚本做什么?
【发布时间】:2011-08-26 19:25:26
【问题描述】:

我正在查看教程“高级自动依赖生成”,并找到了一个脚本:

 %.P : %.c
   ....; [ -s $@ ] || rm -f $@

目标的那部分做什么?我知道我见过这种语法: [...]||... 之前在 bash 脚本中,但我不记得它是如何工作的……

提前致谢!!

【问题讨论】:

  • P.S.如果我没记错 $@ 指的是 foo.P...

标签: bash scripting dependencies makefile


【解决方案1】:

如果前面的命令失败(即[),则执行下面的命令(rm)。失败是一个非零返回码。

【讨论】:

  • 好的,但如果我理解正确,[ -s $@] 会检查 foo.P 是否存在......如果它不存在,为什么要删除它?我很困惑...
  • 它还会检查它是否为空。也许它应该是空的。
  • @Jason: [ -s $@ ] 测试目标是否为非空。因此,如果 ... 部分生成一个空文件,则规则将删除该文件(但奇怪的是,成功了)。
【解决方案2】:

测试[ -s $@ ] 测试非空文件。

  • 如果文件不为空,请勿删除。
  • 如果文件为空,则删除(空)文件。

因此,序列[ -s $@ ] || rm -f $@ 会删除当前目标文件(make 表示法中的$@)如果它是一个空文件。

这是 shell 和 make 符号的有趣组合。 $@ 部分是正在构建的目标的 make 符号。 (它也是 shell 脚本的完整参数列表的 shell 表示法,但在这种情况下,make 表示法优先于 shell 表示法——shell 看不到 $@。)

【讨论】:

    猜你喜欢
    • 2022-01-10
    • 2016-01-24
    • 1970-01-01
    • 2017-10-24
    • 1970-01-01
    • 2014-01-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多