S'échapper dans makefile


87

J'essaye de le faire dans un makefile et ça échoue horriblement:

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

est-ce que tu sais pourquoi? Je suppose que cela a à voir avec la fuite, mais quoi et où?


5
Comment ça échoue? Quels messages d'erreur génère-t-il? Qu'attendez-vous qu'il fasse?

Réponses:


163

C'est le signe dollar, dans les makefiles, vous devrez taper $$pour obtenir un seul signe dollar:

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

133
Ouais, faire est un gaspillage d'argent: il faut en mettre deux $pour en avoir un.
P Shved

8
@PavelShved Je n'ai jamais payé une seule fois pour make. :)
Trevor Hickey

Pour quiconque trouve cette réponse dans le cadre d'une recherche, il y a aussi des problèmes avec les caractères «#» qui sont pris comme début des commentaires. Pour ceux-ci, vous devez échapper avec une barre oblique inverse: "\ #".
Jim Monte le

16

Faire est assez lispy quand vous y arrivez. Voici une version non-awk qui fait la même chose:

space := $() #

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

all:
    $(info $(M_ARCH))
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.