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