Escapando em makefile

87

Estou tentando fazer isso em um makefile e falha terrivelmente:

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

Você sabe por quê? Acho que tem a ver com escapar, mas o quê e onde?

Jonas Byström
fonte
5
Como isso falha? Que mensagens de erro ele produz? O que você espera que faça?

Respostas:

163

É o cifrão, em makefiles você terá que digitar $$para obter um único cifrão:

M_ARCH := $(shell g++ -dumpmachine | awk '{split($$1,a,"-");print a[1]}')
Martin
fonte
133
Sim, fazer é um desperdício total de dinheiro: você tem que colocar dois $para obter um.
P Shved
8
@PavelShved Nunca paguei pelo make. :)
Trevor Hickey
Para quem encontrar essa resposta como parte de uma pesquisa, também existem problemas com os caracteres '#' que são considerados como o início dos comentários. Para estes, você deve escapar com uma barra invertida: "\ #".
Jim Monte
16

Make é bastante ligeiro quando você começa a fazê-lo. Esta é uma versão não awk que faz a mesma coisa:

space := $() #

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

all:
    $(info $(M_ARCH))
richq
fonte