将Android NDK make文件重构为模块

Refactor Android NDK make files into modules

本文关键字:重构 模块 文件 make Android NDK      更新时间:2023-10-16

我在将一些make文件重构为可管理的模块时遇到了麻烦。

下面是我尝试完成的结构:

  • jni/Android.mk
  • jni/Application.mk
  • jni/libobj Android.mk
  • jni/libpng Android.mk
  • jni/libzip Android.mk
  • jni/freetype Android.mk
  • jni/ftgles Android.mk
  • jni/qcar Android.mk
  • jni/imagetargets Android.mk

注意:我从Vuforia SDK ImageTargets示例开始,并添加了其他一些库,如读取OBJ, PNG和ZIP文件。我也包括freetype和ftgles库。

我从我的根Android调用其他make文件。可文件

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS) 
include jni/libobj/Android.mk 
include jni/libpng/Android.mk
include jni/libzip/Android.mk
include jni/freetype/Android.mk
include jni/ftgles/Android.mk
include jni/qcar/Android.mk
include jni/imagetargets/Android.mk

你可以看到所有的make文件在github上的一个gist

编译器给出如下错误:

安装libFTGLES。so => libs/armeabi/libFTGLES。所以编译+ +arm: ImageTargets <= ImageTargets.cppjni/imagetarges/imagetarges .cpp:44:24: fatal error: libpng/png.h: No .这样的文件或目录编译终止。: * (obj/地方/armeabi/obj/ImageTargets/ImageTargets。0]错误1

任何想法如何使libpng(和其他模块)头可用于imagetarts模块?

我认为使用LOCAL_EXPORT_C_INCLUDES在每个子makefile中指定包含的路径将确保在构建最终模块时头文件可用。

在NDK文档(在您的NDK目录中可用)中检查此标志的文档,但据我所知,它将做您想做的事情:自动导出每个子模块的包含路径到最终模块。