簡體   English   中英

對導入的makefile的更改不會在android-ndk中觸發重建

[英]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.mkother-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.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之外的環境變量)。

它可能不是最優雅的方式,但有時我會通過添加額外的空格或新行來修改其中一個來源。 這似乎喚醒了編譯器。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM