Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 如何在makefile中验证文件的非空行和非注释行_Linux_Makefile_Gnu Make - Fatal编程技术网

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

Linux 如何在makefile中验证文件的非空行和非注释行,linux,makefile,gnu-make,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

我想在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

这里有许多问题、复杂情况和bug

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

您的
sed
可能不理解您试图使用的regex方言

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

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

validate:${TEX\u FILENAME}
grep-q-v-e'^[:space:]*$'-e'^[:space:]*%'$<
如果
make
未停止,则文件有效。如果您担心忘记这是为了什么,可以在
grep
命令上方添加注释


如果您想使用Perl正则表达式,也许看看您的系统是否有<代码> GRP-P/COD>(但请理解这不是可移植的),或者简单地在Perl中重写这一点。

您可以在其中执行一个shell命令的规则,例如:内容:= $(shell GRIP-C)^ $“.x”,其中GRIP-C“^ $”将计算空行。你可以把它放在脚本中,先让它工作。它不工作,当我尝试执行它时,验证未成功,即使文件有未注释的linesHow,如果成功,我可以使用此代码打印消息吗?这非常无用,但您可以在命令末尾添加
&&echo success
。我可以使用if语句中的条件,因为上面是在执行make的终端中打印的条件吗文件。
cmd&&foo | | bar
if cmd;然后是福;埃尔斯酒吧;fi
当我在下面尝试代码@if latex$(BASENAME).tex\然后\echo 1。乳胶(1)成功;\else\echo 1。乳胶(1)失败;\echo\fi我遇到以下错误/bin/sh:-c:line 2:意外标记附近的语法错误
('/bin/sh:-c:line 2:
echo 1.latex(1)成功;\'make:**[latex1]错误1
validate: ${TEX_FILENAME}
    grep -q -v -e '^[[:space:]]*$$' -e '^[[:space:]]*%' $<