Вам нужна функция glob
.
Чтобы использовать ее в вышеприведенном примере, вы должны сделать что-то вроде этого
cc_import(
name = "my_test_lib"
static_library = "lib/my_test_lib/test.lib"
hdrs = glob(["lib/my_test_lib/include/*.h"])
visibility = ["//visibility:public"],
)
, чтобы найти все файлы, заканчивающиеся .h
под lib\my_test_lib\include
и поместите их в атрибут hdrs
вашего cc_import
.
В документации Bazel есть дополнительная информация о glob
: https://docs.bazel.build/versions/master/be/functions.html#glob
Примечание: всегда используйте прямые косые черты на всех платформах в файлах Bazel BUILD (даже в Windows).
Несколько шаблонов глобуса
Иногда полезно вставитьболее одного шаблона в глобе, например, вот так
cc_import(
...
hdrs = glob([
"lib/my_test_lib/include/*.h",
"lib/my_test_lib/include/*.hpp",
"lib/my_test_lib/public/*.h",
]),
...
)
Объединение глобуса с жестко закодированным списком файлов
Еще одна полезная вещь - это комбинирование глобусов сжестко закодированные пути.Там может быть несколько нужных вам файлов, а затем каталог, который вы также хотите включить.Вы можете сделать это, используя оператор +
, чтобы объединить жестко закодированный список путей с глобальными результатами, подобными этому
cc_import(
...
hdrs = [
"lib/my_test_lib/some_header.h",
] + glob([
"lib/my_test_lib/include/*.h",
]),
...
)
Глобализация иерархии каталогов (остерегайтесь массивных включений)
Функция glob
также поддерживает обход каталогов и их подкаталогов при поиске файлов.Это можно сделать с помощью шаблона **
glob.Так, например, чтобы захватить все файлы .h
в каталоге my_test_lib
, используйте этот глобус
cc_import(
...
hdrs = glob([
"lib/my_test_lib/**/*.h",
]),
...
)
Осторожно: сюда будут включены все файлы ниже указанного каталога, как и ожидалось.Это может выйти из-под контроля, поскольку неясно, какие файлы включены.Может быть лучше держаться подальше от **
.