取决于make文件本身

Mat*_*ner 25 makefile gnu-make

如果Makefile本身被更改,安全的赌注是将所有目标都视为过时.

有没有一种聪明的方法来添加这种依赖?还有其他选择吗?

Per*_*ytt 8

确保目标文件依赖于makefile:

$(OBJFILES) : Makefile
Run Code Online (Sandbox Code Playgroud)

生成Makefile文件的名称在哪里。


Jac*_*lly 6

一个安全的赌注,但一个可怕的想法.示例:您正在使用automake和update Makefile.am来添加单个源文件.正确的反应是只编译新文件并将其链接.在您的方案中,一切都将被重建.

此外,除非您触摸文件,否则添加依赖项不会执行任何操作,例如:

$(SRCS): Makefile
    touch $@
Run Code Online (Sandbox Code Playgroud)

然后,这将使使用mtime的编辑器绊倒以检测并发修改(emacs就是一个例子).

如果您正在做一些重要的事情,那么只需make clean all在进行更改后运行.


ela*_*vie 5

自 GNU make 4.3 版本以来,现在可以使用这两个特殊变量

  1. .EXTRA_PREREQS
    • 为每个目标添加新的先决条件
  2. MAKEFILE_列表
    • 获取make文件的路径

让每个目标都依赖于当前的 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)