需要更好地了解Andorid.mk

时间:2015-03-12 07:42:01

标签: java-native-interface android.mk

我已阅读所有Android.mk介绍,并在此论坛上查看了其中的一些帖子。并且仍然不确定如何将其应用于我想要做的事情。我只是想访问本机库文件,其中一些文件位于我的JNI目录下面几层。我所做的是将我的JNI目录中的符号链接放到我的源代码中,称为tbd,并将以下行放在我的Android.mk中

LOCAL_PATH := $(call my-dir)
include $(call all-subdir-makefiles)
include $(CLEAR_VARS)
LOCAL_MODULE    := HelloJNI 
LOCAL_C_INCLUDES += $(LOCAL_PATH)/tbd
LOCAL_SRC_FILES := HelloJNI.c  manifest.c 
LOCAL_STATIC_LIBRARIES := \
libtbd_service \
libtbd_common \
libc

我不知道如何查看tbd目录中的某些文件。我试图在libc direcoty中的一个文件中调用一个函数,这个文件在我的jni文件夹下面几层,我收到消息"找不到文件"。我看了一篇帖子,其中有人建议如下:

FILE_LIST := $(wildcard $(LOCAL_PATH)/*.cpp)
FILE_LIST += $(wildcard $(LOCAL_PATH)/**/*.cpp)
FILE_LIST += $(wildcard $(LOCAL_PATH)/**/**/*.cpp)
LOCAL_SRC_FILES := $(FILE_LIST:$(LOCAL_PATH)/%=%)

这是否意味着我必须为/ tbd中的每个目录执行此操作?必须有一种更有效的方法来做到这一点。

其他人建议......

LOCAL_SRC_FILES += $(patsubst $(LOCAL_PATH)/%, %, $(wildcard folder/**/*.cpp))

我甚至不能遵循这个:-(%在这一行做什么?有人会解释这个命令在做什么吗?

@alijandro;谢谢。所以我要弄清楚的是我有多少级别的目录结构。嘿,你知道静态或共享库吗? Android.mk文件说" BUILD_SHARED_LIBRARY是构建系统提供的一个变量,它指向一个GNU Makefile脚本,负责收集所有的 自最新的'包括$(CLEAR_VARS)&#39并确定要构建什么,以及如何做 究竟。 "所以我不知道它将如何完成所有这些或它意味着什么的细节。它可能会对提到的源文件进行递归搜索吗?

1 个答案:

答案 0 :(得分:1)

FILE_LIST := $(wildcard $(LOCAL_PATH)/*.cpp)
FILE_LIST += $(wildcard $(LOCAL_PATH)/**/*.cpp)
FILE_LIST += $(wildcard $(LOCAL_PATH)/**/**/*.cpp)
LOCAL_SRC_FILES := $(FILE_LIST:$(LOCAL_PATH)/%=%)

上面的语句将获得最大化为三个子目录的.cpp文件列表。它使用makefile内置函数进行文件名操作wildcard

LOCAL_SRC_FILES += $(patsubst $(LOCAL_PATH)/%, %, $(wildcard folder/**/*.cpp))

同样,上面的语句使用内置函数模式替换$(patsubst pattern,replacement,text),这意味着在pattern中找到text并将其替换为replacement。模式%表示makefile中的任何字符。

您可以参考here获取有关makefile的更多信息。