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",
    ]

Надеюсь, это решит проблему.

Другие вопросы по тегам