Как правильно создать системную библиотеку заголовков только в bazel? - PullRequest
0 голосов
/ 09 января 2019

Мы переносим проект CMake в Bazel. У нас есть несколько библиотек только с заголовками, которые помечены как SYSTEM в проекте CMake для подавления некоторых предупреждений. При переносе их на Bazel мы можем выполнить эту работу, используя следующую команду

cc_library(
    name = "lib",
    srcs = ["include/header1.h", ...],
    includes = ["include"],
)

Это работает, но согласно документации Bazel C ++ , не рекомендуется иметь заголовки интерфейса / общедоступных в srcs. Они должны быть частью hdrs. Добавление их в заголовки не работает, так как вместо -isystem.

используется обычное включение на основе -I.

Является ли наш способ сделать это хорошо, хотя Базель не рекомендует? Если нет, то как правильно это сделать?

EDIT: После некоторого копания нашел атрибут textual_hdrs в cc_library и, используя его, похоже, он тоже работает. И это кажется более чистым подходом, чем добавление общедоступных заголовков к srcs. Теперь правило выглядит так

cc_library(
    name = "lib",
    textual_hdrs = ["include/header1.h", ...],
    includes = ["include"],
)

Это выглядит как хорошее решение для нас, за исключением того, что документация по textual_hdrs не достаточно ясна, чтобы указать, что это то, для чего она предназначена.

PS: На самом деле мы не можем реорганизовать код для исправления предупреждений, поскольку существует множество подобных библиотек, и они полностью выходят за рамки этого процесса миграции.

1 Ответ

0 голосов
/ 14 января 2019

Оказывается, добавление его к hdrs работает , если вы убедитесь, что strip_include_prefix имеет значение None (или не передано). У нас был макрос, который оборачивал экземпляр cc_library, и по умолчанию strip_include_prefix выдавал пустую строку. Интересно, что это не влияет на textual_hdrs или srcs, но влияет на hdrs

Подводя итог, кажется, что ниже работает нормально

cc_library(
    name = "lib",
    hdrs = ["include/header1.h", ...],
    includes = ["include"],
)
...