使makefile中的include包含在文件的位置

时间:2011-11-10 02:39:15

标签: makefile cygwin android-ndk

this question直接相关。如何使makefile中的include指令的行为相对于当前脚本的位置?

假设当前路径是任意的,您无法控制它。只有makefile位置是已知的。你的makefile不是根文件 - 它包含在内。这就是Android NDK中的确切方式。

是否有一个带有当前makefile名称的内置变量?我可以从中删除文件名,只留下路径吗?在Cygwin上使用make 3.81。

3 个答案:

答案 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所在的目录,因此您无需从中删除任何内容。

http://www.gnu.org/software/make/manual/make.html#Recursion

答案 2 :(得分:2)

我发现相对路径有效(GNUMake 3.81),但如果它们不适合你,请试试这个:

include $(abspath ../whatever)