Я начинаю новый проект, и мне нужно выбрать систему сборки. Я ненавижу добавлять вручную каждый исходный файл C ++ в мои правила сборки, потому что это тот тип вещей, который должен быть автоматизирован к 2016 году, и это делает работу более сложной при рефакторинге (переименуйте класс в заголовке, а также в исходный файл и построить системный файл …).
Когда я наткнулся на этот пост, я начал использовать CMake с рекурсивным глобированием файлов. Укажите исходные файлы глобально с GLOB?
Это говорит о том, что глобализация — это зло, потому что CMake использует две фазы для сборки (cmake и make) и при обычном использовании пользователь только перезапускает вторую фазу (make).
На первый взгляд, Bazel также позволяет копировать файлы. Разве это плохо с Базелем? Бежит find
над базой кода такая проблема масштабирования, что сборка систем действительно должна ее избежать?
У Базеля нет проблем, упомянутых в этом посте, т.е.
(Мы не рекомендуем использовать GLOB для сбора списка исходных файлов из
ваше исходное дерево. Если файл CMakeLists.txt не изменяется, когда источник
добавлена или удалена, тогда сгенерированная система сборки не может знать, когда
попросить CMake регенерировать.)
Базель всегда будет замечать, было ли что-либо добавлено, удалено или изменено из совпадений глобуса, и соответственно перестроить. Глоблинг никогда не даст вам несвежих результатов с Базелем.
Там являются пара предостережений и ограничений, перечисленных в энциклопедии сборки для globbing, так что вы должны прочитать это перед использованием globs.
Кроме того, вы можете увидеть, что происходит, используя базовый запрос:
bazel query '//path/to/your:target' --output=build
# /Users/kchodorow/gitroot/path/to/your/BUILD:7:1
java_library(
name = "target",
srcs = ["//path/to/your:A.java", "//path/to/your:B.java"],
)
Это напечатает «оцененный» шар, так что вы можете поиграть и посмотреть, как Bazel отслеживает вводимые данные.
Нужно найти использование glob в Bazel, это может вызвать длительную фазу анализа для больших glob, но если вы используете флаг —watchfs, то изменение файловой системы будет отслеживаться при наблюдении за событиями файловой системы, вместо того, чтобы указывать все файлы, так что добавочная сборка должно быть очень быстро