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

问题描述 投票:1回答:1

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

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

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
linux makefile gnu-make
1个回答
1
投票

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

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

你的sed可能不理解你试图使用的正则表达方言。

make的目的是告诉你什么时候失败时,有一个脚本告诉你“失败”是没有意义的。

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

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.