Является ли make файл в основном тем же, что и командный файл?

Я знаю все о пакетных файлах и делал их раньше, но я не понимаю, что такое make файл. Это похоже на пакетный файл. Каковы сходства и различия?

Ответ 1

Нет. В make файле есть специальные правила, которые определяют, как файлы зависят друг от друга. Он не обязательно выполняется в том порядке, в котором он написан.

Пакетный файл представляет собой последовательность команд и управляющих операторов.

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

Ответ 2

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

Если вы не делаете ничего, кроме команд оболочки в Makefile, то это на самом деле очень похоже на каталог "пакетных файлов", и он выполняет каждый, когда указан связанный с ним целевой объект.

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

И чтобы быть полным, я должен добавить, что make также является макропроцессором. Он ориентирован на системы создания программного обеспечения, поэтому он обеспечивает обработку символических элементов в своей проблемной области, таких как имена источников и целей.

Теперь make не является специально специализированной экспертной системой, 1 но она делает больше, чем просто пакетный шелл-код, и технически он соответствует определению экспертной системы.

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


1. Вместо этого это простая в использовании экспертная система. Skynet, вероятно, не появится из случайной опечатки в сложном Makefile.

Ответ 3

Чтобы нарисовать на нем довольно абстрактный спин:

  • Пакетные файлы написаны на императивном языке.
  • Make файлы написаны на декларативном языке для обработки файлов (который предназначен и обычно используется для контроля сборки).

Ответ 4

Makefiles перечисляет команды, которые выполняются, но они структурированы иначе, чем список последовательных команд. Вместо этого у них есть цели и команды, чтобы "сделать" их. make затем проверяет перечисленные зависимости и видит, какие цели необходимо обновить, чтобы сделать то, о чем вы сказали. Существует много неявных правил (при условии, что файл *.c уже знает, как его компилировать в *.o и даже создавать исполняемый файл!) И стандартные переменные (например, CFLAGS), чтобы вы могли использовать это в своих интересах. И, вопреки странице man, вы можете использовать эти неявные правила без Makefile.

Самый простой способ подумать о том, что makefile говорит, как сделать "A" заданным "B", а затем вы говорите, что хотите сделать то, что хотите (например, make all), а не как это сделать. Он определяет отдельные этапы.

Ответ 5

Очень интересный вопрос. С оболочкой script или пакетным файлом вы предоставляете компьютеру список инструкций, которые необходимо выполнить по порядку. Он начинается сверху, работает до тех пор, пока он не достигнет конца, а затем остановится. Хорошо, могут быть определения функций, петли и gotos, которые изменяют точный порядок, в котором происходят события, но в основном говорят о прогрессе в файле, линейном.

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

Два разных подхода для выполнения двух разных действий.

Ответ 6

Совсем нет. Они похожи в том смысле, что все языки программирования схожи (тем более, что они оба являются сценариями), но у них разные цели.

цель make файлов - описать, как создать проект. Обычно это означает создание правил (на специальном языке), которые говорят такие вещи, как:

  • всякий раз, когда вы видите файл, который заканчивается на .c, запустите программу "gcc", чтобы скомпилировать его в объектный файл ".o".
  • всякий раз, когда у вас есть группа ".o", связывайте их с ".exe".

Конечно, это упрощенное описание.

Основное преимущество использования make ( "интерпретатор" для языка makefile) заключается в том, что вы получаете синтаксис, который предназначен для таких вещей. Например, make обычно выполняет такие действия, как проверка того, изменился ли файл, чтобы вы не компилировали файл, который не имеет никаких изменений.

Ответ 7

Makefiles - это данные для программы Make. Думайте о них как о том, что сделали старые ребята, прежде чем они получили XML:)