如何在另一个makefile中包含Android.mk

时间:2012-07-30 13:40:53

标签: makefile android-ndk

我遇到一个问题,包括另一个Android.mk并构建相关的共享库。

生成文件:

LOCAL_PATH := $(call my-dir)

MY_CORE_PATH := $(abspath $(LOCAL_PATH)/../..)
include $(CLEAR_VARS)

LOCAL_MODULE     := Phone
LOCAL_SRC_FILES  := phone.cpp
LOCAL_SHARED_LIBRARIES := libCore

include $(BUILD_SHARED_LIBRARY)    
include $(MY_CORE_PATH)/Android.mk

当我编译它时,我得到一个错误,

make: *** No rule to make target 'libCore.so' needed by 'libPhone.so'. Stop.

然而,libCore.so构建没有任何问题,但是这个makefile无法正确引用。请提供有关如何解决此问题的任何建议。

NDK和Android版:android-ndk-r6,适用于Android ICS的API级别9楼。

我目前能够通过进行以下更改来解决问题。

# Modified Android.mk

LOCAL_PATH := $(call my-dir)
MY_CORE_PATH := $(abspath $(LOCAL_PATH)/../..)

# libCore
include $(CLEAR_VARS)
LOCAL_MODULE := Core
include $(MY_CORE_PATH)/Android.mk

include $(CLEAR_VARS)

LOCAL_MODULE     := Phone
LOCAL_SRC_FILES  := phone.cpp
LOCAL_SRC_FILES += libCore

include $(BUILD_SHARED_LIBRARY)

1 个答案:

答案 0 :(得分:1)

我找到了编译错误的原因。这是因为在其他makefile中未正确提供LOCAL_MODULE名称。以下是所做的更改,

[1]在构建libCore.so的Android.mk中,模块名称被提及为,

LOCAL_MODULE := Core

而不是

LOCAL_MODULE := libCore

[2]最后两个陈述是互换的;首先包含Makefile,然后构建库。

我的理解是'lib'在模块名称中是可选的。我没有怀疑这是因为它在NDK中构建得很好,当它作为Android源代码树的一部分构建时会出现问题。