需要更好地理解 Andorid.mk
Need to understand Andorid.mk better
我已经阅读了所有 Android.mk 的介绍,并在本论坛的此处评论了一些 post。并且仍然不确定如何将它应用到我正在尝试做的事情中。我只是想访问本机库文件,其中一些文件位于我的 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
我不知道如何查看待定目录中的某些文件。我正在尝试调用 libc direcoty 中文件中的函数,该文件位于我的 jni 文件夹下几个级别,我收到消息 "file not found"。我看到一个 post,其中有人提出以下建议:
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 脚本,该脚本负责收集所有
自最近 'include $(CLEAR_VARS)' 以来您在 LOCAL_XXX 变量中定义的信息,并确定要构建什么以及如何构建
确切地。 “所以我不知道它是如何完成所有这一切的细节或它意味着什么。它可能会对提到的源文件进行递归搜索吗??
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 中的任何字符。
您可以参考 here 了解更多关于 makefile 的信息。
我已经阅读了所有 Android.mk 的介绍,并在本论坛的此处评论了一些 post。并且仍然不确定如何将它应用到我正在尝试做的事情中。我只是想访问本机库文件,其中一些文件位于我的 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
我不知道如何查看待定目录中的某些文件。我正在尝试调用 libc direcoty 中文件中的函数,该文件位于我的 jni 文件夹下几个级别,我收到消息 "file not found"。我看到一个 post,其中有人提出以下建议:
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 脚本,该脚本负责收集所有 自最近 'include $(CLEAR_VARS)' 以来您在 LOCAL_XXX 变量中定义的信息,并确定要构建什么以及如何构建 确切地。 “所以我不知道它是如何完成所有这一切的细节或它意味着什么。它可能会对提到的源文件进行递归搜索吗??
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 中的任何字符。
您可以参考 here 了解更多关于 makefile 的信息。