#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"'
(или избежали кавычек…).