【问题标题】:How to force an error if file is missing?如果文件丢失,如何强制出错?
【发布时间】:2017-05-15 12:14:27
【问题描述】:

如果文件myFile 不存在,makefile 的这个 sn-p 将停止执行:

 test:
        if [ -e myFile ] ; then \
            echo "Error Message"; \
        fi;

如果我将 echo-statement 替换为 $(error: Error Message); \,则在这两种情况下都会停止生成文件。但如果文件存在,我需要停止生成文件。

【问题讨论】:

  • 你能解释一下具体情况吗?哪个命令会生成myFile?我认为这是一个 XY 问题。
  • 是的,如果其他构建过程已完成,则正在创建此文件。所以如果这个过程完成了,我需要停止这个makefile。
  • 这两个项目的Makefile可以合并吗?我认为这比检查文件是否存在更好。
  • 对不起,但我认为这不是我的解决方案......

标签: shell makefile gnu-make


【解决方案1】:

$(error )是make自己解释的,所以如果在读取文件的过程中被命中,就会产生错误。如果在执行配方期间需要出错,则必须运行返回错误退出代码的命令。最直接的是false,例如

 test:
        if [ -e myFile ] ; then \
            echo "Error Message"; false; \
        fi;

当然,您可以使用$(shell ) 来检查文件,无需配方:

ifeq ($(shell test -e myFile && echo yes),)
    $(error Error Message)
endif

【讨论】:

  • 或者你可以做test: myFile。只要 myFile 不匹配任何模式规则,make 就会生成一个可读的警告,指出无法创建 myFile...
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-01-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-24
  • 2019-02-28
  • 1970-01-01
相关资源
最近更新 更多