Ucieczka w makefile


87

Próbuję to zrobić w pliku makefile i kończy się to strasznym niepowodzeniem:

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

wiesz dlaczego? Myślę, że ma to związek z ucieczką, ale co i gdzie?


5
Jak to się nie udaje? Jakie komunikaty o błędach generuje? Czego oczekujesz od tego?

Odpowiedzi:


163

To znak dolara, w plikach makefile musisz wpisać $$pojedynczy znak dolara:

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

133
Tak, zarabianie to totalna strata pieniędzy: musisz postawić dwa, $aby zdobyć jednego.
P Shved

8
@PavelShved Nigdy nie zapłaciłem za markę. :)
Trevor Hickey

Dla każdego, kto znajdzie tę odpowiedź w ramach wyszukiwania, występują również problemy ze znakami „#”, które są traktowane jako początek komentarzy. W tym celu należy użyć odwrotnego ukośnika: „\ #”.
Jim Monte

16

Marka jest dość sepleniona, kiedy się do niej zabierasz. Oto wersja inna niż awk, która robi to samo:

space := $() #

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

all:
    $(info $(M_ARCH))
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.