【问题标题】:Android.bp: how to add external header .h filesAndroid.bp:如何添加外部头 .h 文件
【发布时间】:2018-12-04 05:49:01
【问题描述】:

我遇到了与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"

【问题讨论】:

    标签: android hal android-soong


    【解决方案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" ]
    }
    

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

    如果您想从您的模块所依赖的库中继承包含目录,则该库应使用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'
    

    【讨论】:

      【解决方案2】:

      通过简单地包含库的头文件

      #include "/path/to/library/header.h"
      

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

      【讨论】:

        【解决方案3】:

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

        所以要解决上述问题,请给出相对路径。 就像下面的代码sn-p:

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

        com/example/abc/header.h

        像这样,如果它只在使用中就在实现中

        #include "thirdpary.h"

        那么你需要给出路径直到头文件目录。

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

        希望这能解决问题。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-02-11
          • 2017-07-02
          • 1970-01-01
          • 1970-01-01
          • 2015-01-20
          相关资源
          最近更新 更多