Сделать эхо файл, отображающий строку "$ PATH"

Я пытаюсь заставить файл make отобразить следующую строку:

"Please execute next commands:
setenv PATH /usr/local/greenhills/mips5/linux86:$PATH"

Проблема заключается в "$PATH". Команда

@echo "setenv PATH /usr/local/greenhills/mips5/linux86:$PATH"

вызвать результат

"setenv PATH /usr/local/greenhills/mips5/linux86:ATH"

любые комбинации escape-символов, кавычек, "$(shell echo " не получили требуемых результатов...

Любые предложения?

Ответ 1

В руководстве для GNU make они рассказывают об этом конкретном примере при описании функции value:

Функция значения предоставляет вам возможность использовать значение переменная без ее расширения. Обратите внимание, что это не отмененные расширения, которые уже произошли; например, если вы создаете просто расширенная переменная, ее значение расширяется во время определение; в этом случае функция значения вернет то же самое результат с использованием переменной напрямую.

Синтаксис функции значения:

 $(value variable)

Обратите внимание, что переменная - это имя переменной; не ссылка на эту переменную. Поэтому вы обычно не использовали бы a '$ или круглые скобки при написании. (Однако вы можете использовать переменную ссылку в имени, если вы хотите, чтобы имя не было константа.)

Результатом этой функции является строка, содержащая значение переменная, без какого-либо расширения. Например, в этом Makefile:

 FOO = $PATH

 all:
         @echo $(FOO)
         @echo $(value FOO)

Первая выходная строка будет ATH, так как "$ P" будет расширен как переменная make, а вторая выходная строка будет текущим значением вашей среды $PATH переменная, так как функция значения избегала расширения.

Ответ 2

make использует $ для собственных расширений переменных. Например. одиночная символьная переменная $A или переменная с длинным именем - ${VAR} и $(VAR).

Чтобы поместить $ в команду, используйте $$, например:

all:
  @echo "Please execute next commands:"
  @echo 'setenv PATH /usr/local/greenhills/mips5/linux86:$$PATH'

Также обратите внимание, что для make "" и '' (двойные и одинарные кавычки) не играют никакой роли, и они передаются дословно в оболочку. (Удалите знак @, чтобы увидеть, что make отправляет в оболочку.) Чтобы предотвратить расширение оболочки $PATH, во второй строке используется ''.