隐式内置规则和头文件

时间:2018-06-24 01:43:12

标签: makefile dependencies

我将此makefile保存在一个包含一组.cpp的目录中,每个目录代表一个具有仅标头依赖性的单个程序。所有文件都在同一目录中。

例如,要编译程序a,请执行make a。 make的隐式规则将从a成功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 个答案:

答案 0 :(得分:1)

您的万不得已规则不能用于表达您想要的依赖项类型。仅当make需要构建某些东西并且不知道其他规则可以这样做时才考虑它。相反,您应该在可执行文件列表上表达这种依赖关系:

$(exe): utils.hpp test.hpp