我已经阅读了所有的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文件中调用一个函数,该函数位于我的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脚本,该脚本负责收集自最新的'include $(CLEAR_VARS)‘以来在LOCAL_XXX变量中定义的所有信息,并决定构建什么以及如何准确地构建。”所以我不知道它是怎么做的,或者它意味着什么。它是否会对提到的源文件进行递归搜索??
发布于 2015-03-12 08:40:04
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),这意味着在text中查找pattern并将它们替换为replacement。模式%表示makefile中的任何字符。
有关makefile的更多信息,可以参考这里。
https://stackoverflow.com/questions/29004264
复制相似问题