Как добавить правильнее текст с переносами строк и различными символами в переменную в Makefile?

Всем привет, подскажите пожалуйста как добавить правильнее текст с переносами строк и различными символами в переменную в Makefile?

сейчас символы обрезаются и переносы с отступами не учитываются..

Пример текста для записи в переменную в Makefile

VARIABLE="<?php

          namespace App\Form\${CLASS_NAME};

          use App\Form\${CLASS_NAME}\Request\${CLASS_NAME}CreateRequest;
          use Symfony\Component\Form\AbstractType;
          use Symfony\Component\Form\FormBuilderInterface;
          use Symfony\Component\OptionsResolver\OptionsResolver;

          class ${CLASS_NAME}Type extends AbstractType
          {
              public function buildForm(FormBuilderInterface $builder, array $options): void
              {
                  $builder
                      ->add('name', null, [
                          'label' => 'Название'
                      ]);
              }

              public function configureOptions(OptionsResolver $resolver): void
              {
                  $resolver->setDefaults([
                      'data_class' => ${CLASS_NAME}Request::class,
                  ]);
              }
          }
"

да возможно выглядит костыльно.. но все же?


Ответы (1 шт):

Автор решения: aleksandr barakin

предуведомление: в ответе идёт речь о программе gnu/make.


для многострочных текстов лучше использовать директиву define:

define переменная
многострочный текст
с символами $ которые надо удвоить: $$
  и отступами.
если обратный слэш нужен в конце строки, \
то _после_ него
надо поставить пробел. вот так:\ 
тогда и слэш не будет интерпретирован
как символ разрыва строки.
endef

вывести значение такой переменной на экран проще всего с помощью функции info:

цель:
  $(info $(переменная))

результат:

$ make цель
многострочный текст
с символами которые надо удвоить: $
  и отступами.
если обратный слэш нужен в конце строки, то _после_ него
надо поставить пробел. вот так:\ 
тогда и слэш не будет интерпретирован
как символ разрыва строки.

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

цель:
  $(file > имя.файла,$(переменная))

имя файла, конечно, можно указать и с помощью переменной (в том числе и любой подходящей «автоматической», типа $@, $% и т.п.):

имя = имя.файла
цель:
  $(file > $(имя),$(переменная))
→ Ссылка