获取当前执行的 makefile 所在目录的正确方法是什么?
我目前正在使用 export ROOT=$(realpath $(dir $(lastword $(MAKEFILE_LIST))))
并且我遇到了一些问题,当使用完全相同的选项运行 make 时会导致 ROOT 的值不同。大约 90% 的时间它具有正确的值,但在剩余的 10% 中有许多无效路径。
最佳答案
realpath
, abspath
, lastword
并且仅在 GNU Make 3.81 中引入了更多功能 [参见引用]。现在您可以使用 words
获取旧版本中的当前文件名和 word
:
THIS_MAKEFILE:=$(word $(words $(MAKEFILE_LIST)),$(MAKEFILE_LIST))
但我不确定
realpath
的解决方法不用去 shell 。例如这适用于 make v3.80:THIS_MAKEFILE_PATH:=$(word $(words $(MAKEFILE_LIST)),$(MAKEFILE_LIST))
THIS_DIR:=$(shell cd $(dir $(THIS_MAKEFILE_PATH));pwd)
THIS_MAKEFILE:=$(notdir $(THIS_MAKEFILE_PATH))
all:
@echo "This makefile is $(THIS_MAKEFILE) in the $(THIS_DIR) directory"
这使
$ make -f ../M
This makefile is M in the /home/sandipb directory
引用:http://cvs.savannah.gnu.org/viewvc/make/NEWS?revision=2.93&root=make&view=markup
关于makefile - 获取目录makefile驻留在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4555120/