makefile - 获取目录makefile驻留在

标签 makefile gnu-make

获取当前执行的 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/

相关文章:

c - 生成文件错误 :/usr/bin/ld: cannot find -llibname and makedepend

makefile - 是否有makefile目标和变量的命名约定

linux - 为什么用 shell 脚本目标调用 make 会创建一个可执行文件?

makefile - 将命令输出保存到Makefile变量时如何保留空格?

c - 如何有意创建 .dep 文件?

makefile - 如何在 Makefile 中使用自动变量获取第二个依赖文件?

c - 现有文件的 LD 错误

python - 如何在 Eclipse 中使用 Pyenv virtualenv?

linux - 如何执行完全安静的 'make' ,仅输出日志文件?

使用 all、clean 和 other 创建 makefile C