在更改 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 其余部分的情况下,我们无法提供比这更具体的建议。
我有时会更改 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 其余部分的情况下,我们无法提供比这更具体的建议。