Android.bp:如何添加外部标头.h文件

时间:2018-12-04 05:49:01

标签: android makefile hal

我有与How to add external header files during bazel/tensorflow build类似的问题。但我希望有更好的解决方案。

我有一个模块,该模块在其他位置需要一些外部.h头文件。假设我尝试包含“ vendor / external / include / thirdpary.h”,在Android.bp中,我添加了一些像这样的行:

include_dirs: [
"vendor/external/include",
]

但是编译器抱怨当我将其包含在cpp文件中时,该文件不存在:

#include "thirdpary.h"

有解决方案吗?谢谢。

3 个答案:

答案 0 :(得分:1)

使用include_dirs是正确的方法。根据您在描述中所写的内容,它应该可以工作。

以下是一些有关错误检查的建议:

vendor/external/include实际上是$ANDROID_BUILD_TOP的子文件夹吗?

include_dirs中的目录必须相对于AOSP根目录指定。如果路径相对于您的Android.bp,则必须改用local_include_dirs

cc_binary {
    name: "my-module",
    srcs: [ "main.cpp" ],
    include_dirs: [ "vendor/external/include" ]
}

cpp文件是否在与srcs相同的模块定义的include_dirs列表中?

如果要从模块所依赖的库继承include目录,则该库应使用export_include_dirs

cc_library {
    name: "my-library",
    export_include_dirs: [ "include" ]
}

cc_binary {
    name: "my-module",
    srcs: [ "main.cpp" ],
    static_libs: [ "my-library"] 
}

在构建模块时会向编译器提供哪些包含目录?

重建模块并检查-I选项。

m my-module | grep "main.cpp" | sed 's/-I/\n-I/g'

答案 1 :(得分:0)

只需通过

添加库的头文件
#include "/path/to/library/header.h"

,然后在* .pro文件中使用LIBS。

答案 2 :(得分:0)

在上面的代码“ thirdpary.h”文件中将不会被引用或包含,这就是导致上述问题的原因。

因此,要解决上述问题,请提供相对路径。 像下面的代码片段:

如果dir结构中的头文件路径为:

com / example / abc / header.h

像这样,如果仅使用

,则在实现中

#include“ thirdpary.h”

然后您需要提供路径,直到头文件dir。

include_dirs: [
    "vendor/external/include/com/example/abc",
    ]

希望这可以解决问题。