Lolos di makefile

88

Saya mencoba melakukan ini dalam makefile dan gagal total:

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

apa kamu tahu kenapa? Saya kira itu ada hubungannya dengan melarikan diri, tapi apa dan di mana?

Jonas Byström
sumber
5
Bagaimana cara gagal? Pesan kesalahan apa yang dihasilkannya? Apa yang Anda harapkan darinya?

Jawaban:

164

Ini adalah tanda dolar, di makefiles Anda harus mengetik $$untuk mendapatkan satu tanda dolar:

M_ARCH := $(shell g++ -dumpmachine | awk '{split($$1,a,"-");print a[1]}')
Martin
sumber
133
Ya, menghasilkan adalah pemborosan total: Anda harus menempatkan dua $untuk mendapatkan satu.
P Shved
8
@PavelShved Saya tidak pernah membayar untuk membuat. :)
Trevor Hickey
Bagi siapa pun yang menemukan jawaban ini sebagai bagian dari pencarian, ada juga masalah dengan karakter '#' yang diambil sebagai awal komentar. Untuk ini, Anda harus keluar dengan garis miring terbalik: "\ #".
Jim Monte
16

Make cukup lispy ketika Anda turun ke sana. Berikut versi non-awk yang melakukan hal yang sama:

space := $() #

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

all:
    $(info $(M_ARCH))
richq
sumber