gpt4 book ai didi

android - 对导入的 makefile 的更改不会触发 android-ndk 中的重建

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:06:36 26 4
gpt4 key购买 nike

我有一个 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

The idea now is to include/import the makefiles of all sub projects in Android.mk, like this:

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 不会触发相应项目的重建。如何做到这一点?

虽然我可以将生成文件列为 Android.mk 的依赖项,但我想不出办法。 (将它们列在 LOCAL_SRC_FILES 下不起作用。)

我还阅读了关于 $(call import-module,foo/bar) 的内容,它似乎完全符合我的要求。但是,在这种情况下,我必须将 makefile 放在项目目录的 adjacent 目录中(例如 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 包含在最后一行中。

请注意,最后一行之前的行设置了模块路径。通过

makefile 中设置模块路径
NDK_MODULE_PATH := $(LOCAL_PATH)

工作。 (如果要使用NDK_MODULE_PATH,需要在makefile之外定义为环境变量)。

关于android - 对导入的 makefile 的更改不会触发 android-ndk 中的重建,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10319565/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com