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?


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

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))
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.