Thoát trong makefile


87

Tôi đang cố gắng thực hiện việc này trong một tệp makefile và nó thất bại khủng khiếp:

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ó liên quan đến việc trốn thoát, nhưng cái gì và ở đâu?


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

Câu trả lời:


163

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

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

133
Phải, kiếm thật là lãng phí tiền bạc: bạn phải đặt hai cái $mới có một cái.
P Shved

8
@PavelShved Tôi chưa bao giờ trả tiền để thực hiện. :)
Trevor Hickey

Đối với bất kỳ ai tìm thấy câu trả lời này như một phần của tìm kiếm, cũng có vấn đề với các ký tự '#' được lấy làm đầu nhận xét. Đối với những điều này, bạn nên thoát bằng dấu gạch chéo ngược: "\ #".
Jim Monte

16

Make khá ngọng khi bạn xuống nó. Đây là một phiên bản non-awk thực hiện điều tương tự:

space := $() #

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

all:
    $(info $(M_ARCH))
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.