与this question直接相关。如何使makefile中的include
指令的行为相对于当前脚本的位置?
假设当前路径是任意的,您无法控制它。只有makefile位置是已知的。你的makefile不是根文件 - 它包含在内。这就是Android NDK中的确切方式。
是否有一个带有当前makefile名称的内置变量?我可以从中删除文件名,只留下路径吗?在Cygwin上使用make 3.81。
答案 0 :(得分:17)
您可以从MAKEFILE_LIST
builtin variable获取当前正在处理的makefile的名称。
鉴于当前的makefile是已包含的最后一个(换句话说,自当前脚本开始以来你没有使用另一个include
指令),路径脚本本身就是:
SELF_DIR := $(dir $(lastword $(MAKEFILE_LIST)))
现在您可以在同一目录中包含一个脚本(注意没有斜杠,它已由$(dir ...)
添加):
include $(SELF_DIR)another.mk
注意:在GNU Make 3.80中,没有lastword
内置函数。在这种情况下,您可以按照以下$(lastword ...)
替换$(call lastword,...)
来实现它:
lastword = $(if $(firstword $1),$(word $(words $1),$1))
答案 1 :(得分:7)
是否有一个带有当前makefile名称的内置变量?
是的,有,使用$ {CURDIR}。这是顶级Makefile所在的目录,因此您无需从中删除任何内容。
答案 2 :(得分:2)
我发现相对路径有效(GNUMake 3.81),但如果它们不适合你,请试试这个:
include $(abspath ../whatever)