Android.bp: как добавить внешний заголовочный файл.h
У меня похожая проблема, как Как добавить внешние заголовочные файлы во время сборки bazel/tenorflow. но я надеюсь, что есть лучшее решение.
У меня есть модуль, который требует некоторые внешние файлы заголовка.h в другом месте. Предположим, я пытаюсь включить "vendor/external/include/thirdpary.h". В Android.bp я добавляю следующую строку:
include_dirs: [
"vendor/external/include",
]
Но компилятор жалуется, что этот файл не существует, когда я включаю его в мой файл cpp:
#include "thirdpary.h"
Любые решения? Благодарю.
0 ответов
С помощью 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'
Просто включите файлы заголовков библиотеки через
#include "/path/to/library/header.h"
а затем используйте LIBS в своем файле *.pro.
В приведенном выше коде файл "thirdpary.h" не упоминается или не включается, поэтому возникает вышеуказанная проблема.
Итак, чтобы решить указанную выше проблему, укажите относительный путь. как показано ниже, фрагмент кода:
если путь к файлу заголовка в структуре dir:
com / example / abc / header.h
как это и в реализации, если он использует только
#include "thirdpary.h"
тогда вам нужно указать путь до каталога заголовочного файла.
include_dirs: [
"vendor/external/include/com/example/abc",
]
Надеюсь, это решит проблему.