makefile中的If子句产生错误

makefile中的If子句产生错误,makefile,Makefile,我有一个Makefile #.SILENT: #.PHONY: SHELL := /bin/bash ################################################################ ## Colordefinition ################################################################ NO_COLOR = \x1b[0m OK_COLOR = \x1b[32;01

我有一个
Makefile

#.SILENT:
#.PHONY:
SHELL     := /bin/bash
################################################################
## Colordefinition
################################################################
NO_COLOR    = \x1b[0m
OK_COLOR    = \x1b[32;01m
ERROR_COLOR = \x1b[31;01m

%.pdf: %.tex
    NAME=`basename $< .tex` ;\
    echo -e "\t$(OK_COLOR)Typesetting $$NAME$(NO_COLOR)" ;\
    pdflatex -draftmode -interaction=nonstopmode $< > /dev/null ;\
    if [ $$? = 0 ] ; then \
      echo -e "\t$(OK_COLOR)compilation in draftmode without erros$(NO_COLOR)" ;\
      pdflatex -interaction=nonstopmode $< > /dev/null ;\
      if [ -e $$NAME.glo ] ; then \
        echo -e "$(OK_COLOR)Typesetting $$NAME.glo$(NO_COLOR)" ;\
        makeindex -s gglo.ist -o $$NAME.gls $$NAME.glo ;\
      fi ;\
      if [ -e $$NAME.idx ] ; then \
        echo -e "$(OK_COLOR)Typesetting $$NAME.idx$(NO_COLOR)" ;\
        makeinde -s gind.ist $$NAME.idx ;\
      fi ;\ 
    else \
      echo -e "\t$(ERROR_COLOR)compilation in draftmode with erros$(NO_COLOR)" ;\
      exit 0;\
    fi ;\
    echo -e "\t$(OK_COLOR)Typesetting $$NAME finished $(NO_COLOR)" ;\
以下示例可用于测试(test.tex):


Makefile必须如何改进

make命令的这种复杂程度会带来痛苦和痛苦。如果您将这些巨大的命令串联起来,并将其移动到一个.sh文件中,您将发现您的生活更加愉快。然后测试并调试.sh文件,然后生成一个简单的makefile,该makefile只运行.sh文件。如果其他人想仔细阅读你的makefile并发现你的特殊问题,那么就给他们更多的权力


如果需要调试,请复制一份。删除脚本的后半部分。看看它是否有效。如果没有,则继续删除,直到隔离问题。虽然指出额外空间的答案可能是正确的。

在第14行(
fi;\
)的反斜杠后面,紧跟在
else

之前,有一个多余的空间,我敢打赌键入
make test.pdf
效果会很好。虽然可能不会产生任何有用的结果,但只需键入
maketest.pdf
肯定会奏效。那么,请定义“不工作”在您的案例中的含义,以及“工作”应该是什么。@thiton:它真的对您有效吗?我得到了错误
/bin/bash:-c:Zeile 14:Syntax-Fehler:unerwarteds-Dateiende。make:**[test.pdf]Fehler 1
Try in English:
/bin/bash:-c:第14行:语法错误:意外的文件结束。make:**[test.pdf]Fehler 1
现在,这是一条错误消息。下次把它写进你的帖子里。对于那些不会说德语的人,请使用
LC_ALL=en_US make
。我理解你的观点。makefile应该上传到CTAN,“最终用户”应该只运行make all。目前,我正试图简化github上的currencnt Makefile:我受到了这个Makefile的启发:好吧,在这种情况下,请注意,错误消息表示缺少某些内容的“结束”。按二进制搜索进行缩减。@marcondaniel:仅在“\”之前。如果有疑问,请遵循bmargulies的建议,将shell脚本编写到自己的文件中。
make test.pdf
\documentclass{article}
\begin{document}
Hello World!
\end{document}