Я динамически генерирую config.mk с помощью bash script, который будет использоваться 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' тоже не работает, makefile просто рассматривает его как обычный символ)