Импорт библиотеки cmocka в сборке Bazel

#embedded #bazel #bazel-rules #cmocka

Вопрос:

Я использую cmocka с Bazel и хочу импортировать библиотеку cmocka в свои тестовые файлы (для встроенного кода на c), такие как <cmocka.h>, но я всегда получаю: cmocka.h: Такого файла или каталога нет.

мое телосложение такое:

 cc_library(
    name = "mock",
    srcs = ["mock_i2c.c"],
    deps = [":src"],
    visibility = ["//visibility:public"],
    linkstatic = True,
    copts = ["-I test/cmocka/include"],
)
 

Ответ №1:

Для этого случая существует атрибут includes, также вам необходимо добавить свои заголовки в hdrs атрибут:

 cc_library(
    name = "mock",
    srcs = ["mock_i2c.c"],
    deps = [":src"],
    hdrs = glob(["test/cmocka/include/**/*.h"]),
    visibility = ["//visibility:public"],
    linkstatic = True,
    includes= ["test/cmocka/include"],
)
 

Комментарии:

1. потому что я работаю в дирекции src, а моя cmocka находится в дирекции тестов.

2. Вам нужно добавить также hdrs атрибут, я обновил ответ. Если это не работает, то, пожалуйста, покажите топологию вашего проекта, потому что трудно угадать решение

3. —src: привет.c Сборка —тест: тест.c Сборка cmoka: включает: cmocka.h

4. в домашнем директоре есть тест и src. В src: mock_i2c.c и сборка. В тесте: сборка test.c и cmocka.

5. Создайте отдельную библиотеку для cmocka cc_library(name="cmocka", hdrs=["cmocka.h"], includes=["."]) в test/cmocka/BUILD файле, затем добавьте эту библиотеку в качестве зависимости к mock целевой