在 GNU make if 语句中使用 grep

Use grep in a GNU make if-statement


第一:我是 linux 的新手,我已经很抱歉问了一个可能很愚蠢的问题。
我有一个将乳胶文本编译成 pdf 的 makefile。这会创建一个日志文件,我必须在该日志文件中搜索一个字符串,如果该字符串在日志文件中,则再次编译。 所以一切正常,直到我的 if 语句为止。 我正在尝试使用 grep 命令检查子字符串,但无法正常工作。 在我的解决方案中,即使子字符串不在我的日志文件中,也会执行 if 语句。

GREP_FINDINGS := $(shell grep 'undefhrined' linux-20.log)

all: clean linux-20.pdf
ifeq ($(GREP_FINDINGS),)
    pdflatex linux-20
endif

linux-20.pdf:
    pdflatex linux-20
    bibtex linux-20
    pdflatex linux-20
    
.PHONY: clean
    
clean:
    echo Cleaning .aux .bbl .blg .log files
    -rm -f *.aux *.bbl *.blg *.log *.pdf
    echo Cleaning complete.

这个问题的某些部分让我感到不安(例如在第一次通过后 未定义 但在第二次或第三次之后一切正常?),但如果你're asking for is actually what you want, then I'd put the conditional inside the rule:

linux-20.pdf:
    pdflatex linux-20
    bibtex linux-20
    pdflatex linux-20
    !(grep undefined linux-20.log) || pdflatex linux-20