gnu make 忽略 .INCLUDE_DIRS?

gnu make ignoring .INCLUDE_DIRS?

我有以下生成文件:

$ cat foo.mk
.INCLUDE_DIRS += ..
$(info include_dirs is [${.INCLUDE_DIRS}])
include upper.mk

在上一级目录中,我有

$ cat ../upper.mk
$(info HERE!!)  

当我 运行 makefile 时,我得到:

$ make -f foo.mk
include_dirs is [/usr/include /usr/local/include /usr/include ..]
foo.mk:3: upper.mk: No such file or directory
make: *** No rule to make target 'upper.mk'.  Stop.

即使我指定了绝对路径,这也不起作用:

.INCLUDE_DIRS += /absolute/path/to/include/file

为什么 make 找不到 upper.mk,即使我已将可以找到它的目录 (..) 添加到 .INCLUDE_DIRS 变量?

请注意,确实有效:

$ make --include-dir=.. -f foo.mk
include_dirs is [.. /usr/include /usr/local/include /usr/include]
HERE!!

版本信息:

$ make --version
GNU Make 4.0

不幸的是 .INCLUDE_DIRS 实际上是只读的:GNU make 根据搜索目录的默认列表以及您通过 -I--include-dir 指定的任何添加为其构造一个值命令行选项,但此后 GNU make 不对该变量执行任何操作。

如果您想将 .. 添加到包含的 makefile 的搜索目录列表中,正确的方法是调用 make as make -I ..