0

我需要一点关于 Android makefile 的帮助。

我的 2 个应用程序有一个通用模块。我计划为公共模块创建一个生成文件common.mk并将其包含在我的两个应用程序中。

像这样:

app1:
=====
main.c
Android.mk
  ...
  ...
  include ../common/common.mk
  LOCAL_MODULE := app1
  ...
  ...

app2:
=====
main.c
Android.mk
  ...
  ...
  include ../common/common.mk
  LOCAL_MODULE := app2
  ...
  ...

common:
=======
common.mk
common.c

当我使用从根目录构建时make app2,我收到了公共模块之外的所有功能的多个定义错误。

我得出的结论是,common.mk 被包含两次,而 Android 构建系统正在搜索正确的目标(在我的例子中是 app2)。这就是问题发生的原因。

现在我该如何控制呢?Android中的标准方式是什么?

4

2 回答 2

1

正确的方法应该是使用或目标来构建公共库(共享或静态) 。BUILD_SHARED_LIBRARYBUILD_STATIC_LIBRARY

然后将它们添加到app1app2使用LOCAL_STATIC_LIBRARIESor在,和LOCAL_SHARED_LIBRARIES之间创建依赖关系。app1app2common

查看Android.mk 文件语法规范以获取更多信息:

BUILD_SHARED_LIBRARY

指向一个构建脚本,该脚本收集有关您在 LOCAL_XXX 变量中提供的模块的所有信息,并确定如何从您列出的源构建目标共享库。请注意,在包含此文件之前,您必须至少定义 LOCAL_MODULE 和 LOCAL_SRC_FILES。

示例用法:

  include $(BUILD_SHARED_LIBRARY)

请注意,这将生成一个名为 lib$(LOCAL_MODULE).so 的文件

BUILD_STATIC_LIBRARY

BUILD_SHARED_LIBRARY 的变体,用于构建目标静态库。静态库不会复制到您的项目/包中,但可用于构建共享库(请参阅下面描述的 LOCAL_STATIC_LIBRARIES 和 LOCAL_WHOLE_STATIC_LIBRARIES)。

示例用法:

  include $(BUILD_STATIC_LIBRARY)

请注意,这将生成一个名为 lib$(LOCAL_MODULE).a 的文件

LOCAL_STATIC_LIBRARIES

应链接到此模块的静态库模块列表(使用 BUILD_STATIC_LIBRARY 构建)。这仅在共享库模块中才有意义。

LOCAL_SHARED_LIBRARIES

此模块在运行时依赖的共享库模块列表。这在链接时是必要的,并将相应的信息嵌入到生成的文件中。

于 2014-07-02T13:16:30.377 回答
1

在 common.mk 中,您用于分配 C 文件的变量使用 := 而不是 +=。

每当调用 common.mk 时,它将为每个模块分配独立的值

于 2014-07-03T01:12:04.133 回答