Для простых проектов, что предлагают make-файлы поверх «простых» сценариев bash?

3968
Closure Cowboy

Например, если я разрабатываю интерфейсный веб-сайт, у меня может быть несколько файлов CoffeeScript, несколько файлов Sass, несколько файлов HTML и несколько изображений.

Файлы CoffeeScript должны быть скомпилированы в JavaScript, файлы Sass должны быть скомпилированы в CSS, и эти новые файлы должны быть уменьшены. Изображения должны удалить свои метаданные. Все полученные файлы необходимо переместить в новый каталог со своей структурой.

Ничто из этого не кажется особенно сложным, но я видел, как несколько человек использовали для этого make-файлы .

Я слишком неохотно изучаю, как использовать make-файлы? Какие преимущества они могут предложить по сравнению с простым bash-скриптом?

7

2 ответа на вопрос

6
dmckee

Таким образом, вы правы, что это не огромная задача, преимущество, предлагаемое марка сейчас является

  • Как говорит Игнасио, make - это параллельное построение. Используйте -jфлаг.

  • Если вы правильно выразили свои зависимости, никогда не перестраивайте вещи, которые в этом не нуждаются. Конечно, вы можете получить это в скрипте bash, но это означает добавление сложности к скрипту (и я должен был бы прочитать страницу руководства, чтобы вспомнить, как), который make уже знает об этом.

  • Вы можете определить общие правила (суффиксные правила (старый стиль) или шаблонные правила (предпочтительнее в GNU make)), которые работают со всеми файлами типа Bar, которые должны быть построены из типа Foo. Опять же, цикл будет обрабатывать это в bash, но make уже знает, как это сделать.

Но большое преимущество заключается в том, что если задача усложняется, ваш make-файл растет медленно и просто, в то время как ваш сценарий может неожиданно всплыть.

Если вы можете программировать (более или менее вообще), вы можете управлять make (хотя поначалу язык может показаться немного странным).

4
Ignacio Vazquez-Abrams

Makefiles позволяют легко распараллеливать. Так как make осведомлен о зависимостях, он может организовать задания таким образом, чтобы все ядра системы использовались максимально эффективно.