假设~/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中有这样的功能:如何从脚本本身中获取bash脚本的源目录?
如果您真的使用make -C
(而不是make -f
(,并且您的Makefile没有包含在另一个Makefile中,那么您可以简单地使用CURDIR
变量。GNU make在启动时将其设置为当前目录的绝对路径在它已经处理了任何CCD_ 11选项之后";。所以,在你的情况下,它应该做你想做的事。
否则,如果您有时使用make -f
或包含Makefile,则可以将其作为任何Makefile的第一行(或者,至少在任何include
语句之前(:
HERE := $(dir $(lastword $(MAKEFILE_LIST)))
然后使用CCD_ 14来引用这个Makefile的目录。有关详细信息,请参阅GNU make手册。
注意:我几乎可以肯定这个问题会是重复的。令人惊讶的是,我在SO中搜索了一个清晰的答案,只找到了在使用make内置或错误答案之前首先建议shell调用的旧答案(例如,使用firstword
而不是lastword
(。