Зачем использовать сценарий make over a shell?


Make кажется мне просто скриптом оболочки с немного более легкой обработкой аргументов командной строки.

Почему это стандарт для запуска make вместо. /make.sh

5 75

5 ответов:

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

сделать это экспертная система

есть различные вещи, которые делают это трудно сделать с помощью сценариев оболочки...

  • конечно, он проверяет, чтобы увидеть, что устарело, чтобы построить только то, что ему нужно построить
  • выполняет топологическая сортировка или какой-то другой вид анализа дерева, который определяет, что зависит от того, что и в каком порядке строить устаревшие вещи, такие что каждое предварительное условие создается перед каждой зависимостью и только один раз.
  • это язык декларативное Программирование. Новые элементы могут быть добавлены без необходимости их объединения в императивный поток управления.
  • содержит механизм вывода для обработки правил, шаблонов и дат, и это, в сочетании с правилами в вашем конкретный Makefile, это то, что превращает make в экспертная система.
  • он имеет макропроцессор.
  • Читайте также: более раннее резюме make.

Make гарантирует, что только необходимые файлы будут перекомпилированы при внесении изменений в исходные файлы.

например:

final : 1.o 2.o
    gcc -o final 1.o 2.o

1.o : 1.c 2.h
    gcc -c 1.c

2.o : 2.c 2.h
    gcc -c 2.c

если я изменю файл 2.h только & run make, он выполняет все 3 команды, в обратном порядке.

если я изменю файл 1.c только & run make, он выполняет только первые 2 команды в обратном порядке.

попытка выполнить это с помощью собственного сценария оболочки будет включать в себя много if/else проверочный.

Как и выше, Make является декларативным (- ish) языком параллельного программирования.

предположим, что у вас есть 4000 графических файлов для преобразования и 4 процессора. Попробуйте написать 10-строчный сценарий оболочки (я щедр здесь), который будет делать это надежно при насыщении ваших процессоров.

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

make обрабатывает зависимости: makefile описывает их: двоичный файл зависит от объектных файлов, каждый объектный файл зависит от исходного файла и заголовков ... когда make запускается, дата файлов сравнивается, чтобы определить, что нужно повторно скомпилировать.

можно вызвать непосредственно одну цель, чтобы не создавать все, что описано в файле Makefile.

кроме того, синтаксис make обеспечивает подстановку, vpath

все это может быть написано в сценарии оболочки, с сделать у вас уже есть.