Зачем использовать сценарий make over a shell?
Make кажется мне просто скриптом оболочки с немного более легкой обработкой аргументов командной строки.
Почему это стандарт для запуска make вместо. /make.sh
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
только & runmake
, он выполняет все 3 команды, в обратном порядке.если я изменю файл
1.c
только & runmake
, он выполняет только первые 2 команды в обратном порядке.попытка выполнить это с помощью собственного сценария оболочки будет включать в себя много
if/else
проверочный.
Как и выше, Make является декларативным (- ish) языком параллельного программирования.
предположим, что у вас есть 4000 графических файлов для преобразования и 4 процессора. Попробуйте написать 10-строчный сценарий оболочки (я щедр здесь), который будет делать это надежно при насыщении ваших процессоров.
возможно, реальный вопрос заключается в том, почему люди беспокоятся о написании сценариев оболочки.
make обрабатывает зависимости: makefile описывает их: двоичный файл зависит от объектных файлов, каждый объектный файл зависит от исходного файла и заголовков ... когда make запускается, дата файлов сравнивается, чтобы определить, что нужно повторно скомпилировать.
можно вызвать непосредственно одну цель, чтобы не создавать все, что описано в файле Makefile.
кроме того, синтаксис make обеспечивает подстановку, vpath
все это может быть написано в сценарии оболочки, с сделать у вас уже есть.