在更改 Makefile 本身后,如何强制 make 清理并重新编译?

How do I force make to clean and recompile after changes to Makefile itself?

我有时会更改 Makefile,但更改本身不会导致 make 重新编译我的源代码。

我试过这样的事情(EXEC 是我的可执行文件,clean 是通常删除源和中间编译输出)

$(EXEC): Makefile
         make clean
         make

但这会产生无限循环...有什么想法吗?

你有的东西不能工作,因为在 make clean 之后 $(EXEC) 文件将不存在,所以它总是过时的,所以总是重建,重建将 运行 clean 然后 re-exec 本身,所以它又会过时,所以再次 make 会 运行 clean 然后 re-exec 本身,等等

要执行您想要的操作,您需要将 makefile 列为 所有 目标的先决条件。那么你不需要 运行 clean 或 re-run make,因为当 makefile 更改时所有目标都将过时,就像它们已经过时一样如果源文件更改了日期。因此,例如,添加 Makefile 作为目标文件目标的先决条件:

%.o : %.c Makefile
        $(CC) $(CFLAGS) -c -o $@ $<

在不了解您的 makefile 其余部分的情况下,我们无法提供比这更具体的建议。