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 cookie và Chính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.