Как правильно экранировать данные для Makefile?

Я динамически генерирую config.mk со сценарием bash, который будет использоваться файлом Makefile. Файл создается с помощью:

cat > config.mk <<CFG
SOMEVAR := $value_from_bash1
ANOTHER := $value_from_bash2
CFG

Как мне убедиться, что сгенерированный файл действительно содержит содержимое $ value_from_bash * , а не что-то расширенное / интерпретируемое? Мне, вероятно, нужно экранировать $ в $$ и \ в \\ , но есть ли другие символы, которые нужно экранировать? Может быть, есть специальное буквальное присвоение, о котором я не слышал?

Пробелы тоже вызывают проблемы:

$ ls -1
a b
a
$ cat Makefile
f := a b
default_target:
    echo "$(firstword $(wildcard ${f}))"
$ make
a

Если я использую f: = a \ b , он работает (используя кавычки вроде ] f: = 'a b' тоже не сработало, make-файл просто рассматривает его как обычный символ)

37
задан smci 18 October 2011 в 20:29
поделиться