【发布时间】:2016-04-03 03:42:33
【问题描述】:
我有一个 NDK 项目,我在其中使用交叉编译器和标准 gnu make utils 构建共享库。这是通过单独的脚本完成的。但是为了在我的项目中使用库,我希望我的Android.mk 进程调用我的脚本以生成尚未构建的共享库,然后让Android.mk 使用@987654324 包装它@进程。
目前,如果我离线运行我的脚本来生成libmy_so.so,那么下面的makefile 将起作用。但是,如果我不先显式运行脚本,则会收到以下错误:
Android NDK: ERROR:/path_to_project/Android.mk:my_module: LOCAL_SRC_FILES points to a missing file
而且我的脚本永远不会被调用,因此在尝试解决依赖关系之前,make 过程就失败了。
include $(CLEAR_VARS)
LOCAL_MODULE := my_module
LOCAL_SRC_FILES := libmy_so.so
LOCAL_EXPORT_CFLAGS := # some stuff
LOCAL_EXPORT_LDLIBS := # some stuff
$(LOCAL_PATH)/libmy_so.so:
echo "generate file"
$(shell run_script_that_creates_libmy_so.so)
include $(PREBUILT_SHARED_LIBRARY)
有没有一个干净的解决方案?我什至可以自动运行脚本作为预处理步骤(如果文件已经存在,我总是可以让我的脚本安静地退出),但我还没有找到允许LOCAL_SRC_FILES 变量指向不存在的咒语文件。我考虑过放置一个虚拟的 libmy_so.so 来开始,但这是一个丑陋的 hack。
【问题讨论】:
-
我认为你应该在 build.gradle 中配置 ndk,让一个依赖于它的需要。
-
我不能直接使用 build.gradle 来实现这一点,因为我正在创建一个可扩展的工具,它可以让使用 NDK 更容易。请参阅this project 以了解我想要做什么。
标签: android makefile android-ndk ndk-build