当我更改Makefile时,其规则可能已更改,因此应重新评估它们,但make似乎并不这么认为。
在Makefile中,有没有办法说它的所有目标,无论哪个目标都取决于Makefile本身? (无论其名称如何。)
我正在使用GNU make。
答案 0 :(得分:12)
这看起来像Make应该能做的一个更简单,有用,合乎逻辑的事情,但事实并非如此。
这是一种解决方法。如果clean
规则设置正确,则只要makefile被更改,Make就可以使用空的dummy
文件作为标记执行它。
-include dummy
dummy: Makefile
@touch $@
@$(MAKE) -s clean
这适用于大多数目标,即作为实际文件的目标,以及由clean删除的目标,以及依赖于它们的任何目标。副作用目标和一些PHONY
目标将通过网络传播。
答案 1 :(得分:5)
从 GNU make 4.3 版开始,现在可以使用这两个 special variable:
让每个目标都依赖于当前的 make 文件:
在文件顶部附近(在任何包含之前,因为它会影响 MAKEFILE_LIST)放置以下行:
.EXTRA_PREREQS:= $(abspath $(lastword $(MAKEFILE_LIST)))
让每个目标都依赖于当前的 make 文件以及包含的 make 文件
在文件末尾添加以下行:
.EXTRA_PREREQS+=$(foreach mk, ${MAKEFILE_LIST},$(abspath ${mk}))
答案 2 :(得分:1)
我知道的唯一答案是将makefile显式添加到依赖项中。例如,
%.o: %.c makefile
$(CC) $(CFLAGS) -c $<