如何防止makefile重新构建自身两次?

如何防止makefile重新构建自身两次?,makefile,gnu-make,Makefile,Gnu Make,我有一个makefile(GNU Make),其规则如下: Makefile: dep1 ...rebuild makefile... config: ...rebuild makefile... 但是,有时当我运行makeconfig时,dep1比Makefile更新,因此Makefile会被重建两次。这是浪费我的时间。如何防止这种情况发生 为了澄清这一点,Makefile目标将在用于生成Makefile的文件发生更改时重新生成该Makefile。config目标允许您强制

我有一个makefile(GNU Make),其规则如下:

Makefile: dep1
    ...rebuild makefile...

config:
    ...rebuild makefile...
但是,有时当我运行
makeconfig
时,
dep1
Makefile
更新,因此
Makefile
会被重建两次。这是浪费我的时间。如何防止这种情况发生


为了澄清这一点,
Makefile
目标将在用于生成Makefile的文件发生更改时重新生成该Makefile。
config
目标允许您强制重新生成makefile并忽略缓存,例如,当系统配置更改时。

结果是有一个记录不良的变量名为,它列出了命令行上指定的目标。此变量不会出现在文档索引中的任何位置,也不会出现在特殊变量部分,即使文档称其为“特殊变量”

以下是解决方案:

ifneq (config,$(MAKECMDGOALS))
Makefile: dep1
    ...rebuild makefile...
endif

config:
    ...rebuild makefile...

为什么要在配置配方中重建makefile?如果您有两个不同的配方构建同一个文件,并且确定两个目标都已过时,那么该文件将构建两次。make对此无能为力:它不知道你给它的配方到底做了什么。你说的“为什么要在配置配方中重建makefile”是什么意思?
config
recipe的目的就是重建makefile。我不希望Make查看我的规则并解决问题,我希望我能做些什么来防止双重重建。我的意思是,通常在Make中,你只希望有一个配方来构建任何给定的目标。如果你有两个食谱建立相同的目标,那么你可以做两倍的工作。这就是先决条件。但是,在这种情况下,如果您正在重建
Makefile
,那么就更不必要了,因为make总是试图自己重建Makefile:所以基本上,在您开始运行
config
目标之前,您总是知道
Makefile
是最新的。它确实出现在索引中:在描述命令行目标的部分中有文档记录。也许它也应该在“特殊变量”中描述。