Я динамически генерирую 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 просто рассматривает его как обычный символ)