我需要一些Android makefile的帮助。
我的两个应用程序有一个通用模块。我计划为公共模块common.mk
提供一个makefile,并将其包含在我的两个应用程序中。
像这样:
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
从根目录构建时,我收到的是除了常见模块之外的所有函数的多个定义错误。
我得出结论,当Android构建系统正在搜索正确的目标(在我的情况下是app2)时,common.mk会被包含两次。这就是问题发生的原因。
现在我该怎么控制呢? Android中的标准方式是什么?
答案 0 :(得分:1)
正确的方法应该是使用BUILD_SHARED_LIBRARY
或BUILD_STATIC_LIBRARY
目标来构建通用库(共享或静态)。
然后将其添加到app1
和app2
中,只需使用LOCAL_STATIC_LIBRARIES
或LOCAL_SHARED_LIBRARIES
在app1
,app2
之间创建依赖关系和common
。
检查Android.mk file syntax specification以获取更多信息:
<强> 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 强>
此模块在运行时依赖的共享库模块列表。这在链接时是必要的,并在生成的文件中嵌入相应的信息。
答案 1 :(得分:1)
在common.mk中,用于分配C文件的变量使用:=而不是+ =。
每当调用common.mk时,它将为每个模块分配独立的值