[!] Makefile make по-русски - как использовать для удобных команд в терминале

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

make особенно полезна, когда вам нужно группировать команды (как вашего приложения, так и системные) и/или описывать зависимости между ними, например для задачи "обновить состояние бэкэнда_на_машине_разработчика" (такие задачи еще называют "целями"), можно указать, что она подразумевает консольные команды:

  1. composer install
  2. накатываение миграций
  3. разворот текстовых данных

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

make бэкэнда_на_машине_разработчика

(для названий команд работает подсказка терминала через ТАБ!).

Ниже читайте о структуре описания этих команд.

Общий формат Makefile

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

названиеMakeЦели1: зависимость1 
	командаТерминала1
	командаТерминала2

названиеMakeЦели2: названиеMakeЦели1 засимость2
	командаТерминалаN
	командаТерминалаM

где:

  • Называния стоящие на месте:
    • названиеMakeЦели1
    • названиеMakeЦели2

    - также называют целями (target), имено эти имена используются для запуска "снаружи", с помощью утилиты make, запуск происходит в формате:

    make названиеMakeЦели
    
  • Команды, которые надо выполнить в терминале при вызове make названиеMakeЦели, перечисляются:
    1. каждая с новой строки
    2. для указания надо то что это именно команда для данной цели используется символ ТАБуляции (в примере выше отступ равен 2 таба), например:
      названиеMakeЦели2: названиеMakeЦели1 засимость2
      	командаТерминалаN
      	командаТерминалаM
      
  • После двоеточия указывают другие цели (зависимости) - которые надо выполнить ДО данной мейк-команды (цели), таких зависимостей может и не быть, тогда описание цели выглядит как-то так:
    названиеMakeЦели2:
    	командаТерминалаN
    	командаТерминалаM