Подтвердить что ты не робот

Makefile как исполняемый script с shebang?

Можно ли создать исполняемый файл script, который будет интерпретироваться make?

Я пробовал это:

#!/usr/bin/env make --makefile=/dev/stdin

main:
        @echo Hello!

но он не работает - зависает, пока не нажимается Ctrl-c.

4b9b3361

Ответ 1

#!/usr/bin/make -f

main:
        @echo Hello World!

Обычно это все, что вам нужно в стандартном файле make. Имя файла неявно передается как последний аргумент. /dev/stdin здесь (обычно) tty. Вы можете сделать целую env вещь, если есть причина, но часто там нет необходимости.

[email protected]:~/code/videocc/tools > vi Makefile                       
[email protected]:~/code/videocc/tools > chmod a+x Makefile         
[email protected]:~/code/videocc/tools > ./Makefile                 
Hello World!

Ответ 2

Следующее добавляет уровень косвенности, но это лучшее решение, которое я придумал для самопроизвольных make файлов, не называемых "makefile":

#!/bin/sh
exec make -f- "[email protected]" << 'eof'

.PHONY: all
all:
    @echo 'hello world!'

Я пытаюсь собрать #! env hacks для каждого языка/программы здесь.