2014-09-18 3 views
0

Я прочитал этот вопрос: Makefile: $subst in dependency list, но я до сих пор не могу заставить свой скрипт работать правильно.Используйте 'subst' в многострочном скрипте bash makefile?

У меня есть Makefile с линией с содержимым:

#@[email protected]|test_create|Syntax: commoncmdsyntax test_create test_name=<test-name>

Мишень запускает многострочный Баш скрипт, где commoncmdsyntax должна быть заменена на строку, содержащую слова и пробелы.

В сценарии я использую разрез, чтобы назначить переменной desc строку Syntax: commoncmdsyntax test_create test_name=<test-name>.

Проблема в том, что $(subst commoncmdsyntax,new text,$$desc) не заменяет commoncmdsyntax на new text.

Я попытался заменить его одним словом, например XX, но он также не работает.

+0

отредактируйте ваш вопрос, чтобы показать результат 'make -v'. Удачи. – shellter

+0

'make -v' сообщает, что я использую' GNU Make 3.81' – canellas

+0

Вторичное расширение доступно в make 3.81. –

ответ

1

subst функция (как в $(subst commoncmdsyntax,new text,$$desc)) является функцией Make, так что будет выполнять замену перед запуском любого правила и поэтому, прежде чем ваш сценарий присваивает значение desc. Поэтому, даже если вторичное расширение работает так, как вы, кажется, думаете, что это произойдет, этот подход все равно потерпит неудачу.

Если вы хотите, чтобы выполнить замену в чем-то сделанное сценарий оболочки (в рецепте), разумный способ сделать это в рецепте:

echo $dest | sed 's/commoncmdsyntax/new text/' 

Мы можем дать вам более подробное решение если вы дадите нам minimal complete example проблемы.

+0

Я отказался от использования 'subst' и использовал' sed' именно так. Благодаря! – canellas

Смежные вопросы