我正在尝试执行一个名为“make cleanlists”的目标。该目标没有先决条件,应该立即执行(在我的理解中)而不涉及其他规则。
.PHONY: cleanlists
cleanlists:
@echo cleaning source and header lists ..
@rm -f sourcelist.mk
@rm -f headerlist.mk
@echo done.
但是,如果这两个文件不存在,则会检查将这些文件作为先决条件的其他规则,并最终在执行“清单列表”目标之前重新生成它们。
有没有简单的方法强制make来避免这种行为?
由于
答案 0 :(得分:1)
这两个文件的 .mk 名称表明你的makefile中的其他地方你将它们包含为要解析和执行的makefile内容:
include sourcelist.mk
include headerlist.mk
为了使用最新的makefile执行make cleanlists
命令, make 重新生成这些文件,并在计算依赖关系和执行命令之前重新整理整个makefile,如{ {3}}
这对于干净的规则没什么意义,但 make 并不知道。您可以使用How Makefiles Are Remade特别处理此特定规则:
ifneq "$(MAKECMDGOALS)" "cleanlists"
include sourcelist.mk
include headerlist.mk
endif