Если мы хотим выйти за рамки специализированных исполнителей задач и систем веб-сборки, мы, вероятно, подумаем об оригинальном Make. Make — довольно простое, но мощное приложение с четким и лаконичным дизайном.
В этой статье мы рассмотрим другие популярные системы сборки, которые могут соответствовать вашим требованиям даже лучше, чем традиционные решения. Список, конечно, далеко не полный, но все, что здесь есть, есть благодаря его особенностям, влиянию или уникальности.
GNU Make
Первоначальная версия Make была написана для операционной системы Unix, но позже произошли другие реализации и переписывания, в том числе GNU Make . Это требуется для сборки ядра Linux. Эта реализация предлагает все, что было в оригинальной версии, а также дополнительные расширения и улучшения.
Основная концепция заключается в написании специального файла под названием «Makefile», который описывает правила для создания приложения. Каждое правило может опираться на другие данные правила, образуя иерархию. Правило обычно существует в форме цели сборки или выходного файла. Идея состоит в том, что одно правило определяет, как создать выходной файл из одного или нескольких необходимых входных файлов.
Концепция может показаться простой, но избавляет разработчиков от необходимости создавать свои собственные системы для оценки того, нужно ли создавать выходной файл или нет. Make дает нам уровень абстракции, который автоматически выполняет необходимые проверки. Каждая зависимость для правила неявно проверяется, чтобы определить, изменился ли входной файл с момента последнего создания выходного файла. Это ускоряет процессы сборки программного обеспечения, исключая избыточные компиляции.
CMake
Одним из самых ранних преемников Make был CMake , где «C» обозначал кроссплатформенность. Он представляет собой настоящее кроссплатформенное решение для создания программного обеспечения. Поэтому он в основном популярен в проектах, которые должны быть развернуты на разных платформах. Файлы конфигурации могут быть написаны на языке сценариев с большим списком команд.
CMake один не может запустить процесс сборки. Это создаст специфичный для платформы файл, который будет Makefile в Linux. В Windows будет создан совместимый с Visual Studio файл проекта, но есть и другие варианты, такие как использование Makefile. Тем не менее, CMake — это гораздо больше, чем просто слой поверх оригинального Make. Он также может автоматически определять зависимости в таких языках, как C ++ и Java. Это делает процесс сборки более надежным.
Еще одна интересная особенность CMake — возможность создавать пакеты в различных форматах. Если мы думаем о развертывании, то создание пакета звучит как последний шаг и, возможно, также самый раздражающий. Наличие заранее определенного решения для процесса дает нам много комфорта.
Грабли
Почему бы не создать инструмент сборки специально для языка программирования? Мы могли бы назвать такие инструменты, как MSBuild или другие, что можно рассматривать как такую попытку. Но что, если мы хотим пойти еще дальше и использовать этот язык программирования для файлов конфигурации? Войдите в мир Rake .
Rake не был первым инструментом сборки, который использовал существующий язык сценариев для настройки процесса сборки. Тем не менее, его влияние неоспоримо. Это де-факто стандарт для разработчиков на Ruby, и начиная с Ruby 1.9, Rake также является частью стандартной библиотеки.
«В чем главное преимущество Рейка?» — спросите вы. Прежде всего, он может обрабатывать исходные файлы Ruby по умолчанию. Кроме того, разработчики Ruby могут использовать его мгновенно, так как он не требует изучения нового языка или среды. Только API этого инструмента является новым, но остальное знакомо и следует известным шаблонам и принципам. Наконец, Rake использует расширенное сопоставление с образцом Ruby для формирования регулярных выражений в фильтрах для правил. Чтобы узнать больше о Rake, прочитайте эту статью на SitePoint .
НЕ НАСТОЯЩИЕ
Существуют десятки других инструментов сборки, которые следуют подходу Rake, но я хочу выделить именно FAKE . Причина проста: он использует мощный функциональный язык, который имеет доступ ко всей платформе .NET . Чтобы полностью понять идею, стоящую за FAKE, важно знать, что FAKE был создан в то время, когда доменно-специфические языки (DSL) казались основным оружием.
Основные принципы ФАКЕ, вероятно, очень похожи на Джейка. Что отличает FAKE от конкурентов, так это использование оператора F # pipe. Этот оператор обеспечивает полную конфигурацию сборки. Интеграция со средами модульного тестирования (.NET) добавляет тестирование в качестве важной части процесса (после) сборки.
Джейк
Хорошая идея — иметь инструмент для сборки, написанный на JavaScript для среды Node.js. Поскольку Node.js работает на разных платформах, инструмент сборки будет работать и на этих платформах. Кроме того, мы получаем преимущества быстрого выполнения, одновременных обратных вызовов и большого опыта отладки.
Джейк , о котором я говорил в моей первой статье о SitePoint , придерживается той же концепции зависимости правил, которую использовал Make, но приправленной сопоставлением с шаблоном, как в Rake. Кроме того, у нас есть возможности упаковки, которые могут помочь нам создавать пакеты для распространения, и поддерживаются параллельные сборки.
Вывод
В наши дни у нас есть огромное разнообразие возможностей для нашего программного обеспечения процесса разработки приложений. Несмотря на то, что Make по-прежнему является наиболее используемой программой для автоматизации процессов сборки в некоторых контекстах, другие приложения предлагают интересные функции, которые могут значительно упростить наши желаемые задачи.
Другим важным фактором, который необходимо учитывать, является знакомство с используемым языком программирования. Например, команда, состоящая из разработчиков JavaScript, должна быть вполне довольна Джейком. Определенно важно, чтобы каждый член команды мог читать, понимать и, возможно, даже изменять процесс сборки по мере необходимости.
Наша задача — решить, какой инструмент рассмотреть, и эта статья должна была убедить вас, что стоит рассмотреть несколько кандидатов, прежде чем решать, какой инструмент использовать, поскольку у них у всех есть что-то уникальное.
Какая ваша любимая система сборки? У вас есть другие рекомендации?