这条线是什么意思?LOCAL_EXPORT_C_INCLUDES

8 android android-ndk

非常简单的问题,希望得到一个非常简单的答案.我一直在看很多人的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添加到预构建的include目录的路径中,从而能够在其中找到标头.

网址:http://www.srombauts.fr/android-ndk-r5b/docs/PREBUILTS.html

Iro*_*san 13

以下对r6 NDK的docs文件夹LOCAL_EXPORT_*ANDROID-MK.html中的变量的说明如下:

LOCAL_EXPORT_CFLAGS
定义此变量以记录一组C/C++编译器标志,这些标志将
添加到使用
LOCAL_STATIC_LIBRARIES或LOCAL_SHARED_LIBRARIES 的任何其他模块的LOCAL_CFLAGS定义中.

例如,考虑具有以下定义的模块'foo':

   include $(CLEAR_VARS)
   LOCAL_MODULE := foo
   LOCAL_SRC_FILES := foo/foo.c
   LOCAL_EXPORT_CFLAGS := -DFOO=1
   include $(BUILD_STATIC_LIBRARY)
Run Code Online (Sandbox Code Playgroud)

另一个名为'bar'的模块依赖于它:

   include $(CLEAR_VARS)
   LOCAL_MODULE := bar
   LOCAL_SRC_FILES := bar.c
   LOCAL_CFLAGS := -DBAR=2
   LOCAL_STATIC_LIBRARIES := foo
   include $(BUILD_SHARED_LIBRARY)
Run Code Online (Sandbox Code Playgroud)

然后,在
构建bar.c 时,标志'-DFOO = 1 -DBAR = 2'将传递给编译器

导出的标志会添加到模块的LOCAL_CFLAGS中,因此您可以
轻松覆盖它们.它们也是传递性的:如果'zoo'取决于
依赖'foo'的'bar',那么'zoo'也将继承
'foo'导出的所有标志.

最后,在构建 导出它们的模块时使用导出的标志
.在上面的示例中,
在构建foo/foo.c时,-DFOO = 1将不会传递给编译器.

LOCAL_EXPORT_CPPFLAGS
与LOCAL_EXPORT_CFLAGS 相同,但仅适用于C++标志.

LOCAL_EXPORT_C_INCLUDES
与LOCAL_EXPORT_CFLAGS 相同,但对于C包含路径.
如果'bar.c'想要包含
模块'foo'提供的标头,这可能很有用.

  • 真可惜它不像宣传的那样有效.在我的情况下,在我导入的库中,我的标题有"LOCAL_EXPORT_C_INCLUDES".但是对于我正在构建的库,我仍然必须指定先前在"LOCAL_EXPORT_C_INCLUDES"中指定的相同头文件,因为它们不包括在内......这个修改后的构建系统绝对很糟糕. (4认同)