如何设置 Makefile 所在的目录,以便我可以 运行 使用 `make -C` 选项从不同的目录进行制作?

how to set the directory where Makefile exists so that I can run make from different directory using `make -C` option?

说在~/prj/abc/abcsim/abctsim/abcxyz/Makefile下面有一行

TOOLCHAIN_DIR   := $(PWD)/../../../prj1/tools/gcc_tools  

如果我在目录 ~/test 中,并且如果我 运行 make -C ~/prj/abc/abcsim/abctsim/abcxyz,这不起作用,因为 $(PWD) 变量设置为 ~/test,而不是 ~/prj/abc/abcsim/abctsim/abcxyz。如何获取 Makefile 所在的目录路径?
在 bash 中有这样的东西:How can I get the source directory of a Bash script from within the script itself?

如果你真的使用make -C(而不是make -f)并且你的Makefile没有包含在另一个中,你可以简单地使用CURDIR variable。 GNU make 在启动时将其设置为当前目录的绝对路径,“在处理任何 -C 选项后”。所以,在你的情况下,它应该完全按照你的意愿去做。

否则,如果您有时使用 make -f 或包含 Makefile,则可以将其作为任何 Makefile 的第一行(或者至少在任何 include 语句之前):

HERE := $(dir $(lastword $(MAKEFILE_LIST)))

然后用$(HERE)来引用这个Makefile的目录。详情见 the GNU make manual

注意:我几乎可以肯定这个问题是重复的。令人惊讶的是,我在 SO 中搜索了一个明确的答案,只发现了在使用 make 内置函数或错误答案(例如,使用 firstword 而不是 lastword 之前首先建议 shell 调用的旧答案。