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?


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]}')

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))
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.