取决于make文件本身

时间:2010-11-11 02:01:33

标签: makefile gnu-make

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

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

3 个答案:

答案 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

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

让每个目标都依赖于当前的 make 文件:

在文件顶部附近(在任何包含之前,因为它会影响 MAKEFILE_LIST)放置以下行:

.EXTRA_PREREQS:= $(abspath $(lastword $(MAKEFILE_LIST)))

让每个目标都依赖于当前的 make 文件以及包含的 make 文件

在文件末尾添加以下行:

    .EXTRA_PREREQS+=$(foreach mk, ${MAKEFILE_LIST},$(abspath ${mk}))