Android ndk ndk构建静态库-为什么要构建其他文件?

Android ndk ndk构建静态库-为什么要构建其他文件?,android-ndk,ndk-build,android.mk,Android Ndk,Ndk Build,Android.mk,我有一个项目结构如下。我只想用SQLite源代码构建一个静态库,但出于某种原因,当我运行ndk build时,它也会构建其他源代码——就好像它在其他位置包含了Android.mk文件一样 jni/SQLite jni/SQLite/Android.mk (the only .mk file that I want to build) jni/TT jni/Application.mk jni/Android.mk (for building everything such as SDL2)

我有一个项目结构如下。我只想用SQLite源代码构建一个静态库,但出于某种原因,当我运行ndk build时,它也会构建其他源代码——就好像它在其他位置包含了Android.mk文件一样

jni/SQLite
jni/SQLite/Android.mk (the only .mk file that I want to build)
jni/TT
jni/Application.mk
jni/Android.mk   (for building everything such as SDL2)
TT是指向/work/TT的符号链接,其中包含许多跨平台源文件,包括SQLite、SDL2和其他源文件

/work/TT
/work/TT/SQLite
/work/TT/SQLite/sqlite3.c
/work/TT/SDL2
..
这里是jni/SQLite/Android.mk

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

TT_PATH := /work/TT

SRC_SQLITE := $(TT_PATH)/SQLite/sqlite3.c

LOCAL_C_INCLUDES += $(NDK_APP_PROJECT_PATH)/jni
LOCAL_MODULE    := SQLite
LOCAL_SRC_FILES := $(SRC_SQLITE)
include $(BUILD_STATIC_LIBRARY)
为什么要构建其他文件?仅构建SQLite需要做什么

在命令提示下,我位于以下文件夹中: jni/SQLite

我运行ndk构建(与上面的Android.mk内容相同的文件夹)

我希望看到sqlite3.c是唯一编译的文件。但是没有,我看到所有的SDL2项目文件都在生成中

编译完所有文件后,如果再次运行ndk build,我会看到:

MacbookPro:SQLite admin$ ndk-build
[armeabi-v7a] Install        : libSDL2.so => libs/armeabi-v7a/libSDL2.so
[armeabi-v7a] Install        : libmain.so => libs/armeabi-v7a/libmain.so
这清楚地显示了SDL2模块和正在构建的主模块。。但是为什么呢

也许我应该使用:

ndk-build -f Android.mk
…构建我唯一想要的Android.mk,而不是自动搜索/构建我的jni文件夹

当我这样做时,我会出现以下错误,但至少看起来它似乎正在尝试运行一个特定的Android.mk:

MacbookPro:SQLite admin$ ndk-build -f Android.mk
Android NDK: Trying to define local module 'SQLite' in Android.mk.    
Android NDK: But this module was already defined by /Work/TT/android-TT/app/src/main/jni/SQLite/Android.mk.    
/Android/android-ndk-r9d/build/core/build-module.mk:34: *** Android NDK: Aborting.    .  Stop.
My Application.mk如下所示,但在运行ndk build的SQLite文件夹中不存在,这是jni/Application.mk:

# Uncomment this if you're using STL in your project
# See CPLUSPLUS-SUPPORT.html in the NDK documentation for more information
APP_STL := gnustl_static
APP_PLATFORM := android-14
APP_ABI := armeabi-v7a
更新:我尝试了:

ndk-build -d -f Android.mk 
..调试输出显示SDL2/Android.mk和其他.mk文件仍在被调用。如何停止这种递归行为,使其只在当前文件夹中构建Android.mk

这是我看到的调试输出的一个片段:

Reading makefile `/Work/TT/android-TT/app/src/main/jni/SDL/Android.mk' (search path) (no ~ expansion)...
Reading makefile `/Work/TT/android-TT/app/src/main/obj/local/armeabi-v7a/objs/main/SQLite/sqlite3.o.d' (search path) (don't care) (no ~ expansion)...

我的问题的答案是这样做:

ndk-build NDK_PROJECT_PATH=. APP_BUILD_SCRIPT=./Android.mk

这将根据需要构建当前文件夹Android.mk。

我的问题的答案是:

ndk-build NDK_PROJECT_PATH=. APP_BUILD_SCRIPT=./Android.mk

这将根据需要生成当前文件夹Android.mk。

什么是您的应用程序.mk?当您不向ndk build传递参数时,它搜索封闭的android项目,并使用直接位于
jni
directory@RobertWang我已按要求附加Application.mk。@V-master这是否意味着ndk build也会搜索父(上部)结构?构建特定Android.mk的正确方法是什么?“-f”是否如问题中所示正确?@V-master我尝试了ndk build-d-f Android.mk,调试输出显示仍在调用SDL2/Android.mk和其他.mk文件。如何停止这种递归行为?您的应用程序.mk是什么?当您不向ndk build传递参数时,它会搜索封闭的android项目,并使用直接位于
jni
directory@RobertWang我已按要求附加Application.mk。@V-master这是否意味着ndk build将搜索父级(上一级)结构也一样吗?构建特定Android.mk的正确方法是什么?“-f”是否如问题中所示正确?@V-master我尝试了ndk build-d-f Android.mk,调试输出显示仍在调用SDL2/Android.mk和其他.mk文件。如何停止这种递归行为?