4

でコンパイルしたい Android JNI プロジェクトがありますndk-build。プロジェクトには、複数のサードパーティのサブ プロジェクトが含まれています。

+- jni
   +- Android.mk
   +- my-proj.mk
   +- その他の proj.mk
   +- 私のプロジェクト
      +- a.cpp
      +- b.cpp
   +- 他のプロジェクト (サードパーティ)
      +- c.cpp
      +- d.cpp

Android.mk現在のアイデアは、次のように、すべてのサブ プロジェクトのメイクファイルをインクルード/インポートすることです。

LOCAL_PATH := $(call my-dir)

include $(LOCAL_PATH)/my-proj.mk
include $(LOCAL_PATH)/other-proj.mk

other-projスタティックライブラリとしてビルドされます。my-proj.mkに依存し、共有ライブラリother-projとして構築されます。

このプロジェクトのビルドは機能します。ただし、またはのいずれmy-proj.mkかを変更してもother-proj.mk、それぞれのプロジェクトの再構築はトリガーされません。これを行う方法はありますか?

依存関係としてメイクファイルをリストすることはAndroid.mkできましたが、方法がわかりませんでした。(それらを下にリストしてLOCAL_SRC_FILESも機能しません。)

$(call import-module,foo/bar)私はまた、私が望むことを正確に行うように見えるものについても読みました。ただし、この場合、makefile をプロジェクト ディレクトリに隣接jni/makefiles/other-proj/Android.mkするディレクトリ (例: ) に配置する必要がありましたが、LOCAL_SRC_FILES. 絶対パスやパス内に a を指定することを好まないようです..。(メイクファイルはサードパーティ プロジェクトであるため、サブ プロジェクト ディレクトリに直接配置することはできません。)

4

2 に答える 2

2

単純なインクルードではなく、$(call import-module,foo/bar).

最初の変更として、サブ プロジェクトの 1 つをメイン プロジェクトにすることを決定する必要があります。それを取りましょうmy-proj。その後、ディレクトリ構造は次のように変更されます。

+- jni
   +- Android.mk
   +- my-proj
      +- a.cpp
      +- b.cpp
   +- other-proj  (third-party)
      +- Android.mk
      +- c.cpp
      +- d.cpp

基本的に と に名前を変更しmy-proj.mkました。/Android.mkother-proj.mkother-proj/Android.mk

メインは次のAndroid.mkように変更されます。

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)
...
LOCAL_STATIC_LIBRARIES := other-proj
include $(BUILD_SHARED_LIBRARY)

$(call import-add-path,$(LOCAL_PATH))
$(call import-module,other-proj)

other-proj最後の行に含まれています。

最後の行の前の行がモジュール パスを設定することに注意してください。を介してメイクファイルからモジュールパスを設定する

NDK_MODULE_PATH := $(LOCAL_PATH)

動作しませ。(NDK_MODULE_PATHを使用する場合は、makefile の外で環境変数として定義する必要があります)。

于 2012-05-10T11:08:20.227 に答える
1

これは最も洗練された方法ではないかもしれませんが、余分なスペースや改行を入れてソースの 1 つを変更することがあります。それはコンパイラを目覚めさせるようです。

于 2012-04-27T21:40:40.393 に答える