Fuga nel makefile


88

Sto cercando di farlo in un makefile e fallisce orribilmente:

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

sai perché? Immagino abbia a che fare con la fuga, ma cosa e dove?


5
Come fallisce? Quali messaggi di errore produce? Cosa ti aspetti che faccia?

Risposte:


164

È il segno del dollaro, nei makefile dovrai digitare $$per ottenere un unico segno di dollaro:

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

133
Sì, fare è un totale spreco di denaro: devi metterne due $per ottenerne uno.
P Shved

8
@PavelShved Non ho mai pagato per make. :)
Trevor Hickey

Per chiunque trovi questa risposta come parte di una ricerca, ci sono anche problemi con i caratteri "#" che vengono presi come inizio dei commenti. Per questi, dovresti uscire con una barra rovesciata: "\ #".
Jim Monte

16

Make è piuttosto leggero quando ci si arriva. Ecco una versione non awk che fa la stessa cosa:

space := $() #

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

all:
    $(info $(M_ARCH))
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.