如何设置 Makefile 所在的目录,以便我可以 运行 使用 `make -C` 选项从不同的目录进行制作?
how to set the directory where Makefile exists so that I can run make from different directory using `make -C` option?
说在~/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 中有这样的东西:How can I get the source directory of a Bash script from within the script itself?
如果你真的使用make -C
(而不是make -f
)并且你的Makefile没有包含在另一个中,你可以简单地使用CURDIR
variable。 GNU make 在启动时将其设置为当前目录的绝对路径,“在处理任何 -C
选项后”。所以,在你的情况下,它应该完全按照你的意愿去做。
否则,如果您有时使用 make -f
或包含 Makefile,则可以将其作为任何 Makefile 的第一行(或者至少在任何 include
语句之前):
HERE := $(dir $(lastword $(MAKEFILE_LIST)))
然后用$(HERE)
来引用这个Makefile的目录。详情见 the GNU make manual。
注意:我几乎可以肯定这个问题是重复的。令人惊讶的是,我在 SO 中搜索了一个明确的答案,只发现了在使用 make 内置函数或错误答案(例如,使用 firstword
而不是 lastword
之前首先建议 shell 调用的旧答案。
说在~/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 中有这样的东西:How can I get the source directory of a Bash script from within the script itself?
如果你真的使用make -C
(而不是make -f
)并且你的Makefile没有包含在另一个中,你可以简单地使用CURDIR
variable。 GNU make 在启动时将其设置为当前目录的绝对路径,“在处理任何 -C
选项后”。所以,在你的情况下,它应该完全按照你的意愿去做。
否则,如果您有时使用 make -f
或包含 Makefile,则可以将其作为任何 Makefile 的第一行(或者至少在任何 include
语句之前):
HERE := $(dir $(lastword $(MAKEFILE_LIST)))
然后用$(HERE)
来引用这个Makefile的目录。详情见 the GNU make manual。
注意:我几乎可以肯定这个问题是重复的。令人惊讶的是,我在 SO 中搜索了一个明确的答案,只发现了在使用 make 内置函数或错误答案(例如,使用 firstword
而不是 lastword
之前首先建议 shell 调用的旧答案。