如果Makefile本身被更改,安全的赌注是将所有目标都视为过时。
有没有一种聪明的方法来添加这种依赖?还有其他选择吗?
答案 0 :(得分:7)
安全的赌注,但是一个可怕的想法。示例:您正在使用automake并更新Makefile.am
以添加单个源文件。正确的反应是只编译新文件并将其链接。在你的方案中,一切都将被重建。
此外,除非您触摸文件,否则添加依赖项不会执行任何操作,例如:
$(SRCS): Makefile
touch $@
这将使使用mtime检测并发修改的编辑器绊倒(emacs就是一个例子)。
如果您正在做一些重要的事情,请在执行更改后运行make clean all
。
答案 1 :(得分:5)
确保目标文件依赖于makefile:
$(OBJFILES) : Makefile
其中Makefile
是make文件的名称。
答案 2 :(得分:2)
从 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}))