我已阅读所有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并确定要构建什么,以及如何做 究竟。 "所以我不知道它将如何完成所有这些或它意味着什么的细节。它可能会对提到的源文件进行递归搜索吗?
答案 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的更多信息。