如何设置Makefile所在的目录,以便使用"make-C"选项从不同的目录运行make



假设~/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(。

最新更新