Escapar en archivo MAKE

87

Estoy tratando de hacer esto en un archivo MAKE y falla horriblemente:

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

¿Sabes por qué? Supongo que tiene que ver con escapar, pero ¿qué y dónde?

Jonas Byström
fuente
5
¿Cómo falla? ¿Qué mensajes de error produce? ¿Qué esperas que haga?

Respuestas:

163

Es el signo de dólar, en los archivos MAKE tendrá que escribir $$para obtener un solo signo de dólar:

M_ARCH := $(shell g++ -dumpmachine | awk '{split($$1,a,"-");print a[1]}')
Martín
fuente
133
Sí, hacer es una pérdida total de dinero: tienes que poner dos $para obtener uno.
P Shved el
8
@PavelShved Nunca he pagado por hacer. :)
Trevor Hickey
Para cualquiera que encuentre esta respuesta como parte de una búsqueda, también hay problemas con los caracteres '#' que se toman como el inicio de los comentarios. Para estos, debe escapar con una barra invertida: "\ #".
Jim Monte
16

Hacer es bastante ceceo cuando te pones manos a la obra. Aquí hay una versión que no es awk que hace lo mismo:

space := $() #

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

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