2016-08-04 2 views
2

Можно ли «отключить» расширение переменной в моем Makefile для определенного раздела?Доллары в переменных среды Makefile

Вот пример меня вопрос:

print_command: 
    @echo '$(COMMAND)' 

А вот выход я получаю:

$ export COMMAND='My favourite shell is $SHELL' 
$ make print_command 
My favourite shell is HELL 
$ make print_command COMMAND='Welcome to $SHELL' 
Welcome to HELL 

И то, что я хотел бы получить:

$ export COMMAND='My favourite shell is $SHELL' 
$ make print_command 
My favourite shell is $SHELL 
$ make print_command COMMAND='Welcome to $SHELL' 
Welcome to $SHELL 

Можно ли это сделать без использования двойного доллара, например:

$ export COMMAND='My favourite shell is $$SHELL' 
$ make print_command 
My favourite shell is $SHELL 
$ make print_command COMMAND='Welcome to $$SHELL' 
Welcome to $SHELL 

В его простейшей форме я ищу, чтобы направить точное содержимое переменной COMMAND без make, манипулируя им.

ответ

2

Добавить $$ двухдолларовый и двухцилиндровый код.

print_command: 
       @echo "$$COMMAND" 

Мол,

$ export COMMAND='My favourite shell is $SHELL'; make print_command 
My favourite shell is $SHELL 

Заканчивать эту How to Use Variables страницу со страницы GNU макияжем.

Если вы просто добавили одиночную кавычку, make буквально распечатывает переменную: - , например. с

print_command: 
       @echo '$$COMMAND' 
$ export COMMAND='My favourite shell is $SHELL'; make print_command 
$COMMAND 

Поскольку $ несет особое значение в Makefile и что нужно экранировать. Если вам нужно make расширить значение переменной определено, используйте синтаксис value в

print_command: 
       @echo $(value COMMAND) 
$ export COMMAND='My favourite shell is $SHELL'; make print_command 
My favourite shell is /bin/bash 

В приведенном выше случае, значение переменных среды расширяется до /bin/bash.

+0

Это прекрасно, спасибо! –

+1

Можно ли передать его в командной строке без 'export' (т. Е. После' make', но все же без двойного доллара? Я бы предположил, что это не так, поскольку это эквивалентно определению в 'Makefile'. –

Смежные вопросы