如何在makefile中验证非空行和非注释行的文件

时间:2018-03-02 09:18:32

标签: linux makefile gnu-make

我想在makefile中验证非空行和非注释行的sample.x,如果验证通过它应该打印成功,否则它应该退出执行。

我尝试使用以下代码但无法成功。

validate=$(sed "/^\s*$/d" ${TEX_FILENAME} | sed "/^ *%/d;s/%.*//" | wc -l)
if [ "${validate}" -gt 0 ];\
then\
  echo "    validate success";\
else\
  echo "    validate not successfull";\
  echo;\
  exit 2;\
fi

1 个答案:

答案 0 :(得分:1)

这里存在许多问题,复杂性和错误。

在Makefile中,您需要将要传递给shell的任何美元符号加倍。

您的sed可能无法理解您尝试使用的正则表达式方法。

有一个脚本告诉你"失败"当make的目的是告诉你什么时候失败时,有点没有实际意义。

计算匹配数是否为零是一个愚蠢的反模式。只需检查是否有任何匹配。大多数正则表达式工具在找不到匹配时会以非零结果代码退出,这正是make一直关注的问题(虽然sed实际上并没有这样做;但是我们在这里真的不需要sed

validate: ${TEX_FILENAME}
    grep -q -v -e '^[[:space:]]*$$' -e '^[[:space:]]*%' $<

如果make没有停止,则该文件有效。如果您害怕忘记这是为了什么,可能会在grep命令上方添加注释。

如果你想使用Perl正则表达式,可能看看你的系统是否有grep -P(但是要明白这是不可移植的)或者只是在Perl中重写它。