Как я могу передать аргументы в правило создания?

#makefile #command-line #arguments #sh #command-line-arguments

Вопрос:

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

 run:
    @echo "Running projectname"
    @PYTHONPATH=${PYTHONPATH}:$(abs_srcdir)/..; ./projectname
 

Где ./projectname запускается простой скрипт на python, который настраивает и запускает проект, но здесь это не важно. Таким образом, я могу просто выполнить make run в корневой папке проекта, чтобы выполнить и протестировать свое приложение, которое отлично работает. Теперь я хочу передать программе некоторые аргументы командной строки. Я попробовал make run --help , на котором только что был напечатан make текст справки. Запуск make run -- --help печатной

 Running projectname
make: *** No rule to make target '--help'.  Stop.
 

Приложение запускается, и после того, как я выхожу из него, make пытается выполнить цель --help .

Теперь, как я могу передать, например --help , аргумент в свое приложение через make ?

Комментарии:

1. Это не то make , для чего нужно. Просто напишите простой сценарий-обертку, который устанавливает PYTHONPATH соответствующим образом, а затем передайте свои собственные аргументы projectname .

2. Короткий ответ: вы не можете. Командная строка Make интерпретируется с помощью make. Он не передается программам, которые выполняют запуски. Как описано в ответе, вы можете задать переменной make некоторое значение, а затем использовать эту переменную в файле makefile, потому что make интерпретирует назначения переменных в своей командной строке.

Ответ №1:

 make run ARGS=“arg1 arg2”
 

$(ARGS) в ваших файлах создания будет расширен до того, что вы передали.

Комментарии:

1. Как вы справитесь с чем-то подобным ./projectname "arg one" "arg two" ?

2. @chepner — вы бы просто сделали make run ARGS='"arg one" "arg two"' (или избежали кавычек…).