为什么 make 目标即使在使用 .phony 时也是最新的?
Why is the make target up to date even when using .phony?
我有一个如下所示的 Makefile:
RENDER_HTML=jupyter nbconvert --execute --to html
MATE40001_TARGETS=$(wildcard MATE40001/notes/*.ipynb)
.phony: all
all: MATE40001
.phony: variables
variables:
@echo MATE40001_TARGETS:
@echo ${MATE40001_TARGETS} | sed 's/ /\n/' | sed 's/MATE/\tMATE/'
.phony: MATE40001
MATE40001: ${MATE40001_TARGETS}
mkdir -p $@/html/
${RENDER_HTML} $^
mv $@/notes/*.html $@/html/
.phony: clean
clean:
rm -rf */html/ *~ */notes/*.html
当我运行:
make
make clean
make
make MATE40001
我得到以下输出:
...
<normal output>
...
rm -rf */html/ *~ */notes/*.html
make: Nothing to be done for 'all'.
make: 'MATE40001' is up to date.
据我了解,make
正在寻找文件 MATE40001,该文件作为文件夹存在,然后由于没有更新的文件而停止。但是我不希望这种情况发生,我认为添加 .phony: MATE40001
可以解决这个问题。
我需要什么来add/change解决这个问题?
来自@G.M的评论。
使用.PHONY
代替.phony
我有一个如下所示的 Makefile:
RENDER_HTML=jupyter nbconvert --execute --to html
MATE40001_TARGETS=$(wildcard MATE40001/notes/*.ipynb)
.phony: all
all: MATE40001
.phony: variables
variables:
@echo MATE40001_TARGETS:
@echo ${MATE40001_TARGETS} | sed 's/ /\n/' | sed 's/MATE/\tMATE/'
.phony: MATE40001
MATE40001: ${MATE40001_TARGETS}
mkdir -p $@/html/
${RENDER_HTML} $^
mv $@/notes/*.html $@/html/
.phony: clean
clean:
rm -rf */html/ *~ */notes/*.html
当我运行:
make
make clean
make
make MATE40001
我得到以下输出:
...
<normal output>
...
rm -rf */html/ *~ */notes/*.html
make: Nothing to be done for 'all'.
make: 'MATE40001' is up to date.
据我了解,make
正在寻找文件 MATE40001,该文件作为文件夹存在,然后由于没有更新的文件而停止。但是我不希望这种情况发生,我认为添加 .phony: MATE40001
可以解决这个问题。
我需要什么来add/change解决这个问题?
来自@G.M的评论。
使用.PHONY
代替.phony