Экранирование в make-файле


88

Я пытаюсь сделать это в make-файле, и это ужасно терпит неудачу:

M_ARCH := $(shell g++ -dumpmachine | awk '{split($1,a,"-");print a[1]}')

ты знаешь почему? Думаю, это связано с побегом, но что и где?


5
Как это не удается? Какие сообщения об ошибках он выдает? Что вы от него ожидаете?

Ответы:


164

Это знак доллара, в make-файлах вам нужно будет ввести, $$чтобы получить единственный знак доллара:

M_ARCH := $(shell g++ -dumpmachine | awk '{split($$1,a,"-");print a[1]}')

133
Да, make - пустая трата денег: нужно положить два, $чтобы получить один.
П Швед

8
@PavelShved Я ни разу не заплатил за make. :)
Trevor Hickey

Для тех, кто нашел этот ответ в ходе поиска, также есть проблемы с символами '#', которые используются в качестве начала комментариев. Для этого следует использовать обратную косую черту: "\ #".
Джим Монте

16

Когда вы дойдете до Make, он будет шепелявым. Вот версия, отличная от awk, которая делает то же самое:

space := $() #

M_ARCH := $(firstword $(subst -,$(space),$(shell g++ -dumpmachine)))

all:
    $(info $(M_ARCH))
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.