rei*_*ost 17 makefile gnu-make
当我更改Makefile时,它的规则可能已经改变,所以应该重新评估它们,但make似乎并不这么认为.
有没有办法说,在Makefile中,它的所有目标,无论哪个目标,都取决于Makefile本身?(无论其名称如何.)
我正在使用GNU make.
Bet*_*eta 12
这看起来像Make应该能做的一个更简单,有用,合乎逻辑的事情,但事实并非如此.
这是一个解决方法.如果clean规则设置正确,Make可以在makefile被更改时执行它,使用空dummy文件作为标记.
-include dummy
dummy: Makefile
@touch $@
@$(MAKE) -s clean
Run Code Online (Sandbox Code Playgroud)
这适用于大多数目标,即作为实际文件的目标,以及由clean删除的目标,以及依赖于它们的任何目标.副作用目标和一些PHONY目标将通过网络.
由于 GNU make 4.3 版,现在可以使用这两个特殊变量:
让每个目标都依赖于当前的 make 文件:
将以下行放在文件顶部附近(在任何包含之前,因为它会影响 MAKEFILE_LIST):
.EXTRA_PREREQS:= $(abspath $(lastword $(MAKEFILE_LIST)))
Run Code Online (Sandbox Code Playgroud)
让每个目标都依赖于当前的 make 文件以及包含的 make 文件
将以下行放在文件末尾:
.EXTRA_PREREQS+=$(foreach mk, ${MAKEFILE_LIST},$(abspath ${mk}))
Run Code Online (Sandbox Code Playgroud)