我有一个 NDK 项目,我在其中使用交叉编译器和标准 gnu make utils 构建共享库。这是通过单独的脚本完成的。但是为了在我的项目中使用库,我希望我的Android.mk
进程调用我的脚本来生成共享库(如果它尚未构建),然后使用该进程Android.mk
包装它。PREBUILT_SHARED_LIBRARY
目前,如果我离线运行我的脚本来生成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
开始,但这是一个丑陋的黑客。