非常简单的问题,希望得到一个非常简单的答案。我一直在看很多人的android.mk文件,并注意到这一行。我的NDK文档中没有关于它的文档(至少find . -name "*.txt" | xargs grep "LOCAL_EXPORT_C_INCLUDES"
没有提出任何内容)。这是我读过的唯一文件......我的脑袋里...... ...
第2部分:我是否正确地假设我需要这一行来使用预构建的共享库和另一个模块?谢谢你们(和女士们)
III。导出预构建库的标头:
上面的例子被称为'天真',因为在实践中,代码在 foo-user.c将依赖于通常的特定声明 在与预构建的库一起分发的头文件中找到(例如“foo.h”)。
换句话说,foo-user.c将会有一行:
包括< foo.h>
您需要为编译器提供标头及其包含路径 在构建foo-user模块时。 处理这种情况的一种简单方法是在预构建模块中使用导出 定义。例如,假设文件“foo.h”位于下面 相对于预建模块的'include'目录,我们可以写:
`include $(CLEAR_VARS)
LOCAL_MODULE:= foo-prebuilt
LOCAL_SRC_FILES:= libfoo.so
LOCAL_EXPORT_C_INCLUDES:= $(LOCAL_PATH)/ include
包括$(PREBUILT_SHARED_LIBRARY)`
这里的LOCAL_EXPORT_C_INCLUDES定义确保了任何模块 取决于预建的将自动具有其LOCAL_C_INCLUDES 预先添加了prebuilt的include目录的路径,因此 能够在其中找到标题。
网址:http://www.srombauts.fr/android-ndk-r5b/docs/PREBUILTS.html
答案 0 :(得分:13)
以下针对r6 NDK的docs文件夹中ANDROID-MK.html中的LOCAL_EXPORT_*
变量的说明:
LOCAL_EXPORT_CFLAGS
定义此变量以记录将要执行的一组C / C ++编译器标志 被添加到使用
的任何其他模块的LOCAL_CFLAGS定义中 这个与LOCAL_STATIC_LIBRARIES或LOCAL_SHARED_LIBRARIES。例如,考虑具有以下定义的模块'foo':
include $(CLEAR_VARS) LOCAL_MODULE := foo LOCAL_SRC_FILES := foo/foo.c LOCAL_EXPORT_CFLAGS := -DFOO=1 include $(BUILD_STATIC_LIBRARY)
另一个名为'bar'的模块依赖于它:
include $(CLEAR_VARS) LOCAL_MODULE := bar LOCAL_SRC_FILES := bar.c LOCAL_CFLAGS := -DBAR=2 LOCAL_STATIC_LIBRARIES := foo include $(BUILD_SHARED_LIBRARY)
然后,标志'-DFOO = 1 -DBAR = 2'将在
时传递给编译器 建立bar.c导出的标志会添加到模块的LOCAL_CFLAGS中,因此您可以使用 轻松覆盖它们。它们也是传递性的:如果“动物园”依赖于 'bar'取决于'foo',然后'zoo'也将继承所有旗帜
由'foo'导出。最后,构建模块时,导出的标志不 出口他们。在上面的例子中,-DFOO = 1将不会传递给
构建foo / foo.c时的编译器。LOCAL_EXPORT_CPPFLAGS
与LOCAL_EXPORT_CFLAGS相同,但仅适用于C ++标志。LOCAL_EXPORT_C_INCLUDES
与LOCAL_EXPORT_CFLAGS相同,但对于C包含路径 如果'bar.c'想要包含标题,这可能很有用 由模块'foo'提供。