2011-01-03 16 views
16

私はネイティブソースをコンパイルし、.a libsとの依存関係と以下の構造の相対的なヘッダファイルを追加しています。ターゲットを作るためのルールがありません

/JNI/

Android.mk

LOCAL_PATH := $(call my-dir) 
include $(call all-subdir-makefiles) 

include $(CLEAR_VARS) 

LOCAL_LDLIBS := -llog 
LOCAL_MODULE := ndk1 
LOCAL_SRC_FILES := native.c 
LOCAL_STATIC_LIBRARY := mschema 
include $(BUILD_SHARED_LIBRARY) 

native.c

/JNI/PREREQS/

Android.mk

LOCAL_PATH := $(call my-dir) 

include $(call all-subdir-makefiles) 

include $(CLEAR_VARS) 

--UsedサブフォルダのMKファイル

/JNI/PREREQS/mschema/

Android.mkを呼び出します
LOCAL_PATH := $(call my-dir) 

include $(CLEAR_VARS) 

LOCAL_MODULE :=mschema 
LOCAL_SRC_FILES :=libmschema.a 
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/include 

include $(PREBUILT_STATIC_LIBRARY) 

libmschema.a

/JNI/PREREQS/mschema/

ヘッダファイルが含まれています。 (.h)

しかし、ndk-build(NDK5)を試しているうちに、次のエラーが発生しました。

[email protected]:~/dev/workspace/rmsdk.native.wraper$ ndk-buildmake: 
*** No rule to make target `/home/marcos/dev/workspace/rmsdk.native.wraper/jni/prereqs/mschema/native.c', needed by `/home/marcos/dev/workspace/rmsdk.native.wraper/obj/local/armeabi/objs/ndk1/native.o'. Stop. 

私は誤りを指摘入力している間は、私のメイクファイルで間違っているものを、およそ/home/marcos/dev/workspace/rmsdk.native.wraper/jni/prereqs/mschema/native.c' and actually this file is under /home/marcos/dev/workspace/rmsdk.native.wraper/jni/native.c」ですか?

LOCAL_PATH := $(call my-dir) 
include $(call all-subdir-makefiles) 
LOCAL_PATH :=/home/marcos/dev/workspace/rmsdk.native.wraper/jni 
include $(CLEAR_VARS) 
LOCAL_LDLIBS := -llog 
LOCAL_MODULE := ndk1 
LOCAL_SRC_FILES := native.c 
LOCAL_STATIC_LIBRARY := mschema 
include $(BUILD_SHARED_LIBRARY) 

しかし、それは間違っているになります。

問題は、次のように最初のAndroid.mkを変更することで回避することが可能です。より良いアプローチがありますか?

答えて

33

NDK 5でドキュメントから、解決策は、ローカル変数を作成することです。..

私-dirの最後のパスは、通常 現在Android.mkのディレクトリでMakefileを、含ま返します。

LOCAL_PATH := $(call my-dir) 

IMPORTANT NOTE: Due to the way GNU Make works, this really returns 
the path of the *last* *included* *Makefile* during the parsing of 
build scripts. Do not call my-dir after including another file. 

..だから私は次のように私のAndroid.mkを変更するには、この問題を解決するために:これはと同じように、あなたのAndroid.mkの開始時に LOCAL_PATHを定義するのに便利です。

LOCAL_PATH := $(call my-dir) 
MY_PATH := $(LOCAL_PATH) 
include $(call all-subdir-makefiles) 

include $(CLEAR_VARS) 

LOCAL_PATH := $(MY_PATH) 

LOCAL_LDLIBS := -llog -ldl 
LOCAL_MODULE := rmsdk 
LOCAL_SRC_FILES := native.c 

include $(BUILD_SHARED_LIBRARY) 

とその動作

+0

「別のファイルを含めた後にマイディレクトリを呼び出しないでください」。ラインは多くの時間を節約しました。ありがとう。 – Sanket

0

サブメイクファイルを組み込んだ後、ローカルパスをdefするのは正しいと思います。

LOCAL_PATH := $(call my-dir) 
MY_PATH := $(LOCAL_PATH) 
include $(call all-subdir-makefiles) 

include $(CLEAR_VARS) 

LOCAL_PATH := $(MY_PATH) 

LOCAL_LDLIBS := -llog -ldl 
LOCAL_MODULE := rmsdk 
LOCAL_SRC_FILES := native.c 

include $(BUILD_SHARED_LIBRARY) 

これは間違っています。私はあなたがこれを試すことができると思います:

include $(call all-subdir-makefiles) 

include $(CLEAR_VARS) 

LOCAL_PATH := $(call my-dir) 

LOCAL_LDLIBS := -llog -ldl 
LOCAL_MODULE := rmsdk 
LOCAL_SRC_FILES := native.c 

include $(BUILD_SHARED_LIBRARY) 

希望に役立ちます。

+0

私は間違っていました...(((((((((((( – busylee

+0

) "my-dirは、現在のAndroid.mkのディレクトリである最後にインクルードされたMakefileのパスを返します。これは、LOCAL_PATHをあなたのAndroid.mkと同じように: " –

関連する問題