Когда ставить префикс файла BUILD (* .BUILD) в Bazel - PullRequest
1 голос
/ 28 октября 2019

В своем учебнике по модульному тестированию на C ++ Bazel предлагает добавить файл корневого уровня gtest.BUILD в корневой каталог рабочей области, чтобы правильно интегрировать Google Test в тестовый проект.

https://docs.bazel.build/versions/master/cpp-use-cases.html

Зачем создавать новый файл BUILD и добавлять к нему префикс gtest, а не добавлять новое правило сборки в существующий файл BUILD в рабочей области? Это просто второстепенное предпочтение стиля?

1 Ответ

3 голосов
/ 29 октября 2019

Потому что, если вы добавили файл BUILD где-нибудь в рабочей области (например, в //third_party/gtest/BUILD), тогда этот файл создаст пакет там.

Тогда, если у вас есть цели, объявленные в этом файле BUILD,будут ли их файлы в каталоге // third_party / gtest, или они будут существовать в zip-файле, который загружает http_archive? Если первое, то нет необходимости в http_archive, потому что файлы уже находятся в дереве исходных текстов;если последнее, то файл BUILD ссылается на несуществующие файлы в своем собственном пакете. Оба сценария ошибочны.

Лучше назвать BUILD-файл-файл gtest тем, что не создает пакет, но описывает его назначение.

Атрибут build_filehttp_archive может ссылаться на любой файл, имя не требуется. Название gtest.BUILD в основном стилистическое, да, но оно также избегает создания пакета там, где его не следует. Можно сказать, что это «неактивный» файл BUILD, который будет «активным», когда Bazel загрузит http_archive, извлечет его куда-нибудь и создаст в этом каталоге символическую ссылку под названием BUILD, которая указывает на gtest.BUILD.

Еще одно преимуществоналичие таких «неактивных» файлов BUILD позволяет иметь несколько их в одном пакете для нескольких http_archives.

...