【问题标题】:How to make "ndk-build clean" continue on error如何使“ndk-build clean”继续出错
【发布时间】:2014-01-04 03:09:58
【问题描述】:

我有一个包含多个项目的大型源代码树。其中一个项目使用了 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 忽略对尚未构建的库的依赖而只清理本地对象?

【问题讨论】:

  • 你可以让你的make文件的clean规则先运行“ndk-build clean”。
  • 好主意,但如果我做了两次“make clean”,仍然会遇到问题。相信我,如果只是我,我可以忍受它,但如果我像这样将它检查到 git 中,我会收到投诉。

标签: android android-ndk java-native-interface ndk-build


【解决方案1】:

您的 ndk-buid 包含 prebuit 静态库,即使在干净的构建中也不应该消失。有一些非标准步骤构建 libbar.a 并将其复制到 ../../../../lib/

如果你有充分的理由不直接从它的构建位置 (…/obj/local/armeabi) 链接到 libbar.a,那么你有两个选择: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

【讨论】:

  • 我无法确定基于 LOCAL_SRC_FILES 是否存在的条件包含的语法 - 或者 - 如何对 !clean 执行操作。你能详细说明你的答案吗?
  • 请查看更新。但让我再重复一遍,这不是一个 clean 解决方案(双关语)。从长远来看,为了让您的生活更轻松,您应该消除将libbar.a 复制到../../../../lib/ 的步骤。
  • 谢谢,亚历克斯...现在您向我展示了 $(wildcard ...) 和 ifneq(,...) 的用法,这很有意义。很高兴我知道未来的金块。
【解决方案2】:

正如 Alex 的回答中所建议的,您还可以使用 ifneq ($(MAKECMDGOALS),clean) 检查当前目标是否干净

include $(CLEAR_VARS)
LOCAL_MODULE := foo
LOCAL_SRC_FILES := bar.so
LOCAL_EXPORT_C_INCLUDES := bar/location
# Avoid including on clean
ifneq ($(MAKECMDGOALS),clean)
    include $(PREBUILT_SHARED_LIBRARY)
endif

【讨论】:

    猜你喜欢
    • 2013-04-05
    • 2018-05-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-26
    • 1970-01-01
    相关资源
    最近更新 更多