2010-03-04 8 views
56

Je suis en train de le faire dans un makefile et il échoue horriblement:Échapper à makefile

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

savez-vous pourquoi? Je suppose que cela a à voir avec l'évasion, mais quoi et où?

+4

Comment ça échoue? Quels messages d'erreur produit-il? Qu'attendez-vous qu'il fasse? –

Répondre

116

Il est le signe de dollar, en makefiles vous devrez taper $$ pour obtenir un seul signe dollar:

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

Oui, make est une perte totale d'argent: vous devez mettre deux '$' pour en obtenir un. –

+6

@PavelShved Je n'ai jamais payé pour une marque. :) –

13

Marque est tout à fait lispy lorsque vous descendez à elle. Voici une version non-awk qui fait la même chose:

space := $() # 

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

all: 
    $(info $(M_ARCH))