获取当前正在执行的makefile所在目录的正确方法是什么?
我正在使用export ROOT=$(realpath $(dir $(lastword $(MAKEFILE_LIST))))并遇到一些问题,当使用完全相同的选项运行make时,会导致ROOT的值不同.大约90%的时间它具有正确的值,但在剩余的10%中有许多无效路径.
San*_*rya 10
realpath,abspath,lastword和一对夫妇的更多的功能只在GNU推出使3.81 [见参考文献.现在,您可以使用words和获取旧版本中的当前文件名word:
THIS_MAKEFILE:=$(word $(words $(MAKEFILE_LIST)),$(MAKEFILE_LIST))
Run Code Online (Sandbox Code Playgroud)
但是我不确定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"
Run Code Online (Sandbox Code Playgroud)
这使
$ make -f ../M
This makefile is M in the /home/sandipb directory
Run Code Online (Sandbox Code Playgroud)
参考:http://cvs.savannah.gnu.org/viewvc/make/NEWS? revision= 2.93& root= make& view= markup
$(shell pwd) 不正确,因为 makefile 可能存在于 pwd 以外的目录中(由 允许make -f)。
OP 的提议
export ROOT=$(realpath $(dir $(lastword $(MAKEFILE_LIST))))
Run Code Online (Sandbox Code Playgroud)
很好,除了他/他可能想firstword改用,特别是如果顶级 makefile(可能include)在分配给 ROOT 之前是其他 makefile。
如果在分配之前有 10% 的时间有条件包含,则可以解释 OP 10% 的问题,但是,嘿,这是一个猜测......
| 归档时间: |
|
| 查看次数: |
7859 次 |
| 最近记录: |