my-dir 返回当前makefile所在目录,这个宏返回最后包括的 makefile 的路径,通常是当前 Android.mk
的目录。
my-dir
可用于在 Android.mk
文件开头定义 LOCAL_PATH
。例如:
LOCAL_PATH := $(call my-dir)
由于 GNU Make 的工作方式,这个宏实际返回的是构建系统解析构建脚本时包含的最后一个 makefile 的路径。因此,包括其他文件后就不应调用 my-dir
。
例如:
LOCAL_PATH := (call my-dir)
# ... declare one module
include(LOCAL_PATH)/foo/Android.mk
LOCAL_PATH := $(call my-dir)
# ... declare another module
这里的问题在于,对 my-dir
的第二次调用将 LOCAL_PATH
定义为 $PATH/foo
,而不是 $PATH
,因为这是其最近的 include 所指向的位置。
在 Android.mk
文件中的任何其他内容后指定额外的 include 可避免此问题。例如:
LOCAL_PATH := (call my-dir)
# ... declare one module
LOCAL_PATH :=(call my-dir)
# ... declare another module
# extra includes at the end of the Android.mk file
include $(LOCAL_PATH)/foo/Android.mk
如果以这种方式构造文件不可行,请将第一个 my-dir
调用的值保存到另一个变量中。例如:
MY_LOCAL_PATH := (call my-dir)
LOCAL_PATH :=(MY_LOCAL_PATH)
# ... declare one module
include (LOCAL_PATH)/foo/Android.mk
LOCAL_PATH :=(MY_LOCAL_PATH)
# ... declare another module