4

複数のプロジェクトを持つ大きなソース ツリーがあります。プロジェクトの 1 つは JNI を使用しています。

ソースツリー全体を「きれいに」しようとすると、すべてのオブジェクトファイルとライブラリが通過して削除されます。次に、アプリケーションディレクトリにステップインしてクリーンアップします。

私のJNIプロジェクトに到達すると、「ndk-build clean」を実行しますが、リンク先のライブラリがクリーンの一部として削除されているため失敗します。

ndk-build clean
Android NDK: ERROR:/Users/spartygw/xyz/src/applications/foo/jni/Android.mk:bar: LOCAL_SRC_FILES points to a missing file    
Android NDK: Check that /Users/spartygw/xyz/src/applications/foo/jni/../../../../lib/libbar.a exists or that its path is correct   
/Users/spartygw/android-ndk-r6b/build/core/prebuilt-library.mk:43: *** Android NDK: Aborting    .  Stop.
make[3]: *** [clean_android] Error 2
make[2]: *** [clean] Error 2
make[1]: *** [clean] Error 2
make: *** [clean] Error 2

「ndk-build -k clean」と「ndk-build --ignore clean」を追加しようとしましたが、関係なく回避されます。

まだビルドされていないライブラリへの依存関係を ndk-build に無視させ、ローカル オブジェクトをクリーンアップさせるにはどうすればよいですか?

4

2 に答える 2

5

ndk-buidには prebuit 静的ライブラリが含まれていますが、これはクリーン ビルドでも消えることはありません。libbar.aをビルドして にコピーする非標準のステップがいくつかあり../../../../lib/ます。

libbar.a がビルドされた場所 ( …/obj/local/armeabi) から直接リンクしない強い理由がある場合は、2 つのオプションがあります: include $(PREBUILT_STATIC_LIBRARY)$(LOCAL_SRC_FILES) が存在する場合は条件付きで、またはcleanがターゲットでない場合です。

前者のアプローチの簡単な概要に従います。

include $(CLEAR_VARS)
LOCAL_MODULE = bar
LOCAL_PATH := ../../../../lib
LOCAL_SRC_FILES := libbar.a
ifneq (,$(wildcard $(LOCAL_PATH)/$(LOCAL_SRC_FILES)))
  include $(PREBUILT_STATIC_LIBRARY)
endif
于 2013-12-17T02:42:57.440 に答える