我有与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"
有解决方案吗?谢谢。
答案 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" ]
}
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",
]
希望这可以解决问题。