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?


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]}')

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))
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.