获取makefile所在的目录
获取当前执行的makefile所在目录的正确方法是什么 我目前正在使用获取makefile所在的目录,makefile,gnu-make,Makefile,Gnu Make,获取当前执行的makefile所在目录的正确方法是什么 我目前正在使用export ROOT=$(realpath$(dir$(lastword$(MAKEFILE_LIST)))并且遇到了一些问题,当使用完全相同的选项运行make时,将导致ROOT的值不同。大约90%的时间它具有正确的值,但在剩余的10%中有许多无效路径。$(shell pwd)不正确,因为makefile可能存在于pwd以外的目录中(如make-f所允许) 行动建议 export ROOT=$(realpath $(dir
export ROOT=$(realpath$(dir$(lastword$(MAKEFILE_LIST)))
并且遇到了一些问题,当使用完全相同的选项运行make时,将导致ROOT的值不同。大约90%的时间它具有正确的值,但在剩余的10%中有许多无效路径。$(shell pwd)不正确,因为makefile可能存在于pwd以外的目录中(如make-f
所允许)
行动建议
export ROOT=$(realpath $(dir $(lastword $(MAKEFILE_LIST))))
很好,但他/她可能想改用firstword
,特别是如果顶级makefile(可能)在分配到ROOT之前包含其他makefile
如果在分配之前有10%的时间是有条件包含的,那么OPs 10%的问题可以解释,但是,嘿,这是一个猜测…realpath
,abspath
,lastword
,GNU Make 3.81中只引入了两个以上的函数[参见参考文献]。现在,您可以使用words
和word
在旧版本中获取当前文件名:
THIS_MAKEFILE:=$(word $(words $(MAKEFILE_LIST)),$(MAKEFILE_LIST))
但我不确定在不使用shell的情况下,realpath
是否有解决方案。e、 g.这适用于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
参考:为了方便起见,当GNU启动时(在它处理了任何-C选项之后)
它将变量CURDIR设置为当前工作目录的路径名。此值
make不再涉及:特别注意,如果您包含来自其他网站的文件
目录CURDIR的值不会更改。该值与它具有相同的优先级
如果在makefile中设置,则会有(默认情况下,将使用环境变量CURDIR)
不覆盖此值)。请注意,设置此变量对的操作没有影响
make(例如,它不会导致make更改其工作目录)
全部:
echo$(CURDIR)实际上取决于您使用的操作系统和make
(Linux?GNU make?)