Как использовать команду shell echo для добавления файла в цель GNU Makefile - PullRequest
0 голосов
/ 07 июня 2019

Я пытаюсь добавить некоторый текст в файл из целевого объекта make, используя следующий синтаксис

$shell(echo "module load ABC/$$(MODULE_LOAD)" >> $@/_env/local/filexyz)

, но GNU Make 4.2.1 жалуется на следующее.

/bin/sh: -c: line 21: syntax error near unexpected token echo 

Итак, я хочу, чтобы файл PQR / _env / local / filexyz имел следующий текст в последней строке

module load ABC/4.5.6

1 Ответ

4 голосов
/ 07 июня 2019

Во-первых, это неправильный синтаксис для функции make; это должно быть $(shell ...), а не $shell(...).

Во-вторых, я предполагаю, что это действительно появляется внутри рецепта, так как вы используете $@. Задавая вопросы, пожалуйста, включите достаточно деталей, чтобы мы могли видеть весь контекст, например весь рецепт, а не одну строку.

Это серьезный запрет на использование функции shell при написании рецепта, потому что каждая строка в рецепте уже выполняется оболочкой. Это просто сбивает с толку и может вызвать много проблем при использовании функции shell.

В-третьих, вы не хотите экранировать переменную $$(MODULE_LOAD), поскольку это заставит оболочку выполнить команду MODULE_LOAD, которая, вероятно, не существует.

Просто напишите прямо:

    echo "module load ABC/$(MODULE_LOAD)" >> $@/_env/local/filexyz
...