2010-03-04 12 views
56

Tôi đang cố gắng để làm điều này trong một makefile và nó không khủng khiếp:Thoát trong makefile

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

bạn có biết tại sao? Tôi đoán nó phải làm với thoát, nhưng cái gì và ở đâu?

+4

Làm thế nào nó không thành công? Nó tạo ra thông báo lỗi nào? Bạn mong đợi nó làm gì? –

Trả lời

116

Đó là ký hiệu đô la, trong makefiles bạn sẽ phải gõ $$ để có được một ký hiệu đô la duy nhất:

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

Vâng, thực hiện là một sự lãng phí tổng số tiền: bạn phải đặt hai '$' để có được một. –

+6

@PavelShved Tôi chưa bao giờ thanh toán để thực hiện. :) –

13

Make khá lispy khi bạn bắt tay vào nó. Đây là một phiên bản không phải là awk làm điều tương tự:

space := $() # 

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

all: 
    $(info $(M_ARCH))