Makefile

makefile Как последовательно выполнить команды ?

В Makefile заданы команды:

create: ${mess1:mess2} mess3
mess1:
	@echo "Команда 1 выполнена"
mess2:
	@echo "Команда 2 выполнена"
mess3:
	@echo "Команда 3 выполнена"

Когда запускаю команду из консоли

make create mess1

получаю сообщение

Команда 3 выполнена
Команда 1 выполнена

Ожидается, что команда mess3 всегда должна выводить сообщение после выполнения предыдущей команды. Например, при выполнении из консоли

make create mess1

должно быть

makefile Вывод переменных окружения echo -- как распечатать

Используйте два знака доллара, например6

docker.npm.test:
	docker compose  run -ti frontend  echo $$USER 

makefile Испрользование переменных

Например так:

PROJECT_NAME = myproj
APP_CONTANER_COMMAND_PREF = @docker exec -it $(PROJECT_NAME)_web_1

migrate:
	@echo  "Выполняем миграции..."
	$(APP_CONTANER_COMMAND_PREF) php bin/console doctrine:migrations:migrate -n

Makefile Вызов других make команд ПЕРЕД данной

Используйте зависимости (см. раздел об общей структуру), например:

show_vasya:
	@echo  "Вася"

show_message_privet: 
	@echo  "Привет!"

command2: show_message_privet show_vasya
	@echo  "Это будет после привета И Васи."

Теперь, если мы выполним в терминале, в той же папке, где лежит мейкфайл:

make command2

то цели выполнятся в таком порядке

makefile Вызов одной make команды ПОСЛЕ другой

Ранее мы уже говорили о том, как вызывать другие цели перед данной.

Чтобы вызывать другую цель после команд данной цели, просто явно указывайте команду make, например:

makefile Entering directory Скрыть отображение сообщений, тихий режим

Ситуация

make[1]: Entering directory

Проблема возникает при выполнии make команды из другой make команды (но решение должно быть актуальным и при выполнении напрямую из терминала)

Решение

Чтобы убрать сообщение о входе в директорию, в мейкфайле надо написать команду с использование флага -s:

test.me:
	make -s app.show

Если же нужно, чтобы не выводилось и сама команда, то используйте собаку:

makefile @ Символ собаки (а коммерческое) -- что чего нужен

Служит прежде всего, чтобы makе не печатал саму выполняемую команду.

Примеры

Особенно это актуально для echo, чтобы было понятнее создадим мэйкфайл с таким содержимым

privet:
	@echo "Привет"
privet2:
	echo "Привет"

и выполним:

make privet

-- получим:

Привет

и для второй цели:

make privet2

получим:

echo "Привет"
Привет

Makefile:...: *** target pattern contains no '%'. Stop.

Makefile:18: *** target pattern contains no '%'. Stop.

Возможные причины:

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

    Или та же самая ошибка вызывается при неверном формате команды (пример с зависимостями):

Pages

Subscribe to RSS - Makefile