Makefile 目标没有依赖项时生成文件行为不一致

Makefile 目标没有依赖项时生成文件行为不一致,makefile,Makefile,下面是一个快速而肮脏的Makefile,用于对两个文档执行Latex传递 BOOKDIR=/tmp/book SLIDESDIR=/tmp/slides LATEX=pdflatex -shell-escape --halt-on-error book: mkdir -p "${BOOKDIR}" ${LATEX} -output-directory="${BOOKDIR}" book.tex && \ (cd "${BOOKDIR}" &am

下面是一个快速而肮脏的Makefile,用于对两个文档执行Latex传递

BOOKDIR=/tmp/book
SLIDESDIR=/tmp/slides

LATEX=pdflatex -shell-escape --halt-on-error

book:
    mkdir -p "${BOOKDIR}"
    ${LATEX} -output-directory="${BOOKDIR}" book.tex && \
        (cd "${BOOKDIR}" && makeindex book)

slides:
    mkdir -p "${SLIDESDIR}"
    ${LATEX} -output-directory="${SLIDESDIR}" slides/slides.tex

all: book slides
当我运行
makebook
时,它执行book的配方。当我运行
make slides
时,它总是说
make:“slides”是最新的。

这两个目标都没有任何依赖关系,那么为什么make在这两种情况下的行为不一样呢?

基于该命令

${LATEX} -output-directory="${SLIDESDIR}" slides/slides.tex
在当前目录中,似乎有一个名为
slides
的目录。大概你没有一本叫做
book
。您可以更改目标名称或目录名称,或将目标声明为
.PHONY
,具体取决于所需的行为