Я использую csh. Внутри моей Makefile У меня есть что-то вроде этого:Как запустить Makefile со списком аргументов из другого файла
run:
program -switch "--alpha 3 --beta 4 --gamma 5"
Моя цель, чтобы быть в состоянии установить аргументы в -switch когда я бегу Makefile. Я нашел различные решения о том, как это сделать, но в моем случае аргументы типа alpha, beta и gamma составляют около 20-25. В идеале я хотел бы, чтобы поместить их в файл, как это:
file: simple_script_run
--alpha 3 \
--beta 5 \
--gamma 5 \
--..etc
Я предпочел бы иметь аргументы в отдельных строках для удобства чтения. Файл simple_script_run расположен с другими подобными файлами, каждый из которых содержит конфигурацию аргумента внутри каталога run_scripts. Последний находится по тому же пути, что и мой makefile. Цель состоит в том, чтобы иметь возможность заменить список аргументов внутри Makefile, чтобы что-то вроде:
program -switch "$(RUN_ARGS)"
Это является обязательным, что список аргументов содержатся с «». Теперь я хотел бы запустить сборочный файл с помощью команды, аналогичной:
make run RUN_ARGS=$(< run_scripts/simple_script_run)
Очевидно, что это не сработало, и я удивляюсь, почему. Можете ли вы предложить решение для моего решения или лучшую идею? Я был бы рад услышать от вас.
Я предполагаю, что проблема с этой попытки (так как вы не сделали на самом деле * * скажем, что это было), что вы получили частичную команду и то отказ от второй строки файла аргумента обрабатывается как команда в рецепте? make переменные расширяются до оболочки, поэтому строки новой строки расширяются буквально. Вам нужно преобразовать символы новой строки в пробелы, когда вы читаете файл в переменной. –
Изменен файл аргументов, поэтому нет \ n return и аргументы просто разделены пробелами. Вывод оболочки «Недопустимое имя переменной» – Theo
Оболочка выводит это когда? Цитирует аргумент '$ (<...)' аргумента (я не вижу, как это необходимо)? Что означает 'set -x' для этой строки' make' и строки в рецепте? –