代码之家  ›  专栏  ›  技术社区  ›  ABu

隐式内置规则和头文件

  •  0
  • ABu  · 技术社区  · 6 年前

    我有这个 makefile 在一个目录中 .cpp ,每一个都表示一个带有一些仅头依赖项的程序。所有文件都在同一目录中。

    例如编译程序 a 我知道。 make a .make的隐式规则将成功编译 a.cpp ,但是 make 当目标的只包含头的依赖项更改时,还必须重新生成目标。

    但是,一旦一个程序编译,下面的makefile就不会重建任何东西,例如, touch utils.hpp 然后重试编译。发生什么事?

    src := $(shell find . -maxdepth 1 -name "*.cpp")
    exe := $(src:.cpp=)
    
    # In case I want to build every program, w/o a cmd-line target.
    all: $(exe)
    
    %: utils.hpp test.hpp
    

    我的版本是 GNU Make 4.1 .

    1 回复  |  直到 6 年前
        1
  •  1
  •   Renaud Pacalet    6 年前

    最后一条规则不能用于表示所需的依赖项类型。只有当make需要构建某个东西,并且不知道其他规则时才会考虑它。相反,您应该在可执行文件列表中表达这种依赖关系:

    $(exe): utils.hpp test.hpp