[英]Changes to imported makefile don't trigger rebuild in android-ndk
我有一個Android JNI項目,我想用ndk-build
編譯。 該項目包含多個第三方子項目。
+- jni +- Android.mk +- my-proj.mk +- other-proj.mk +- my-proj +- a.cpp +- b.cpp +- other-proj (third-party) +- c.cpp +- d.cpp
現在的想法是在Android.mk
包含/導入所有子項目的makefile,如下所示:
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
不會觸發相應項目的重建。 有沒有辦法做到這一點?
我雖然可以將makefile列為Android.mk
依賴項,但我無法找到方法。 (在LOCAL_SRC_FILES
它們不起作用。)
我還閱讀了關於$(call import-module,foo/bar)
,這似乎完全符合我的要求。 但是,在這種情況下,我必須將makefile放在與項目目錄相鄰的目錄中(例如jni/makefiles/other-proj/Android.mk
),但我無法弄清楚如何指定LOCAL_SRC_FILES
。 它們似乎不喜歡用絕對路徑或路徑中的..
來指定。 (我不能將makefile直接放在子項目目錄中,因為它們是第三方項目。)
我想出了一種方法,雖然不是簡單的包含,而是使用$(call import-module,foo/bar)
。
首先,您需要決定其中一個子項目是主項目。 讓我們以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.mk
和other-proj.mk
到other-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之外的環境變量)。
它可能不是最優雅的方式,但有時我會通過添加額外的空格或新行來修改其中一個來源。 這似乎喚醒了編譯器。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.