Makefile 取决于make文件本身 如果MaFIX文件本身被更改,则安全的赌注是考虑所有目标过期。

Makefile 取决于make文件本身 如果MaFIX文件本身被更改,则安全的赌注是考虑所有目标过期。,makefile,gnu-make,Makefile,Gnu Make,有没有一种聪明的方法来添加这种依赖关系?有其他选择吗?确保对象文件依赖于makefile: $(OBJFILES) : Makefile 其中,Makefile是生成文件的名称。这是一个安全的赌注,但却是一个糟糕的主意。示例:您正在使用automake和updateMakefile.am添加单个源文件。正确的反应是只编译新文件并将其链接进来。在你的计划中,一切都将重建 此外,除非您触摸文件,否则添加依赖项不会起任何作用,例如: $(SRCS): Makefile touch $@ 这

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

确保对象文件依赖于makefile:

$(OBJFILES) : Makefile

其中,
Makefile
是生成文件的名称。

这是一个安全的赌注,但却是一个糟糕的主意。示例:您正在使用automake和update
Makefile.am
添加单个源文件。正确的反应是只编译新文件并将其链接进来。在你的计划中,一切都将重建

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

$(SRCS): Makefile
    touch $@
这将触发使用mtime检测并发修改的编辑器(emacs就是一个例子)


如果您正在做一些重要的事情,只需在完成更改后运行
makeclean all

由于GNU制作了4.3版,现在可以使用这两个版本:

  • .EXTRA\u prereques
    • 为每个目标添加新的先决条件
  • 生成文件列表
    • 获取make文件的路径
  • 让每个目标依赖于当前的make文件:

    将以下行放在文件顶部附近(在任何include之前,因为它会影响MAKEFILE_列表):

    .EXTRA_PREREQS:= $(abspath $(lastword $(MAKEFILE_LIST)))
    
    使每个目标依赖于当前生成文件以及包含的生成文件

    将以下行放在文件末尾:

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

    我想我需要自己填充SRC文件?是的。我的问题可能听起来有点傲慢,但我想问的是,您希望从替代解决方案中获得什么样的属性。我不知道如何依赖“每一个目标”,我不认为这些资源不会被更新。但是如果所有目标都依赖于Makefile呢+1提出了一个很好的观点。@Matt Joiner:这是可行的(您还必须包括所有包含的.mk文件的传递闭包),但您仍然有多余的重新编译,通常情况下是这样的。最好不要麻烦:默认情况下,您可以进行短构建,如果需要,还可以进行完整构建。如果你把它放进去,如果你只做了一个小的调整,你就没有办法进行短构建。我知道你做了很多C++的东西。你不能认真地建议完全重建一个C++项目的代价很小吗?为什么你必须触摸Mag文件?该规则仅在Makefile已比目标文件更新时运行。它不涉及
    Makefile
    。它正在接触源文件。如果你不接触源文件,它总是会考虑到源的过时,这意味着它每次都会重新编译它。<代码>使< /COD>被调用。不久前我问了同样的问题:奇怪的是,它没有出现在搜索中,甚至没有相关的。这可能还不够。变量改变时会发生什么?(例如,您可能需要在
    make CDEFS=debug
    make CDEFS=release
    之间进行清理)