Потому что, если вы добавили файл BUILD
где-нибудь в рабочей области (например, в //third_party/gtest/BUILD
), тогда этот файл создаст пакет там.
Тогда, если у вас есть цели, объявленные в этом файле BUILD,будут ли их файлы в каталоге // third_party / gtest, или они будут существовать в zip-файле, который загружает http_archive? Если первое, то нет необходимости в http_archive, потому что файлы уже находятся в дереве исходных текстов;если последнее, то файл BUILD ссылается на несуществующие файлы в своем собственном пакете. Оба сценария ошибочны.
Лучше назвать BUILD-файл-файл gtest тем, что не создает пакет, но описывает его назначение.
Атрибут build_file
http_archive
может ссылаться на любой файл, имя не требуется. Название gtest.BUILD
в основном стилистическое, да, но оно также избегает создания пакета там, где его не следует. Можно сказать, что это «неактивный» файл BUILD, который будет «активным», когда Bazel загрузит http_archive, извлечет его куда-нибудь и создаст в этом каталоге символическую ссылку под названием BUILD, которая указывает на gtest.BUILD
.
Еще одно преимуществоналичие таких «неактивных» файлов BUILD позволяет иметь несколько их в одном пакете для нескольких http_archives.