LINUX.ORG.RU

Как вывести многострочную переменную в файл?

 


0

1

Есть Makefile файл в котором я добавил такой блок:

ifeq ($(GUI),1)
	echo "$(MY_WAVES)" >> $@
	echo "add wave -recursive /*" >> $@
	echo "run -all" >> $@
else
	echo "run -all" >> $@
	echo "quit" >> $@
endif
А именно вывод переменной MY_WAVES в файл. Когда одна строка - всё работает как надо, вот скрипт который вызывает make:
MY_WAVES="add wave -color Red -analog-step -height 100 -radix decimal /real_nco_in"

echo "-----"
echo "$MY_WAVES"
echo "-----"
export MY_WAVES

export VSIM_ARGS=" -L altera_mf_ver -L lpm_ver "
linux32 make ARCH=i686 SIM=modelsim
-----
add wave -color Red -analog-step -height 100 -radix decimal /real_nco_in
-----

Проблема в том что если задать многострочное значение:

read -d '' MY_WAVES <<EOF
add wave -color Yellow -analog-step -height 100 -radix decimal /sig_in
add wave -color Red -analog-step -height 100 -radix decimal /real_nco_in
add wave -color Green -analog-step -height 100 -radix decimal /imag_nco_in
EOF
то сама переменная становится многострочной:
-----
add wave -color Yellow -analog-step -height 100 -radix decimal /sig_in
add wave -color Red -analog-step -height 100 -radix decimal /real_nco_in
add wave -color Green -analog-step -height 100 -radix decimal /imag_nco_in
-----
но весь процесс ломается:
/bin/sh: 1: Syntax error: Unterminated quoted string
make[1]: *** [sim_build/runsim.do] Ошибка 2
make: *** [sim] Ошибка 2

Как можно сделать так, чтобы внутри Makefile команда echo выводила многострочник в файл?

echo "$(MY_WAVES)" >> $@
Или хотя бы делала подстановки \n в спец символы переноса строки? Может есть способ просто вывалить содержимое файла в другой файл? Я тогда напишу все эти строки в отдельном файле...

Как можно сделать так, чтобы внутри Makefile команда echo выводила многострочник в файл?

В GNU make вроде же может напрямую в bash команды отправлять.

rk17
()
Ответ на: комментарий от anonymous

ВНУТРИ Makefile это надо сделать.

Просто сторонний софт так устроен, что кроме как файлом или многострочной переменной окружения мне туда не желательно лезть, оба варианта:

echo -ne "$(MY_WAVES)" >> $@
echo -ne $(MY_WAVES) >> $@
внутри Makefile не работают!

Однако раз ругается «/bin/sh: 1: Syntax error: Unterminated quoted string» то есть подозрения что это не в Makefile происходит, а где-то раньше.

I-Love-Microsoft ★★★★★
() автор топика
Ответ на: комментарий от I-Love-Microsoft

А зачем вообще с макефайлом так мучиться? Но СО предлагает подобный вариант

define MY
who
is
here
endef

export MY
all:
        echo "$$MY" > out
anonymous
()
Ответ на: комментарий от anonymous

Спасибо, это рабочее решение!

Мой Makefile в моем проекте:

define MY_WAVES

add wave -color Yellow -analog-step -height 100 -radix decimal /sig_in
add wave -color Red -analog-step -height 100 -radix decimal /real_nco_in
add wave -color Green -analog-step -height 100 -radix decimal /imag_nco_in

endef
export MY_WAVES
А вот Makefile стороннего средства, в котором я лишь это сделал:
ifeq ($(GUI),1)
	echo "$$MY_WAVES" >> $@
	echo "add wave -recursive /*" >> $@
	echo "run -all" >> $@
Это корректно выводит многострочник в файл. Проблема решена! :)

Почему Makefile не хочет так же хорошо принимать многострочники из переменных окружения - хз, может я именно так echo «$$MY_WAVES» не пробовал писать, но уже не суть.

I-Love-Microsoft ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.