2011-05-17 34 views
21

Tôi có đoạn code sau trong makefile của tôi:biến In ấn từ bên trong Makefile

S_RES=$(shell cat output) 

echo -e "Serial result = \t" $(S_RES) 

Về cơ bản, tôi muốn để lưu trữ đầu ra của lệnh shell cat output trong biến S_RES, và sau đó echo biến vào màn hình (với một số văn bản giải thích ở phía trước của nó). Tôi cũng muốn có thể sử dụng biến sau này trong chương trình của mình. Tôi nghĩ rằng tôi đã làm theo các hướng dẫn được đưa ra trong các câu hỏi StackOverflow khác nhau, nhưng nó dường như không hoạt động.

Trả lời

41

Nếu không gian đơn giản thay vì thoát chuỗi \t được cho phép, và make của bạn là GNU make 3,81 hoặc cao hơn, $(info) có sẵn.
Ví dụ:

$(info Serial result = $(S_RES)) 

Nếu phiên bản make của bạn là 3,80 hoặc thấp hơn, $(warning) thể đáp ứng được mục đích . Tuy nhiên, warning cũng in số dòng.

EDIT: Để biết thông tin của bạn, kết quả đầu ra makefile sau abc trên GNU tôi làm cho 3,81.

A := $(shell echo abc) 
$(info $(A)) 
+0

Thật không may là dường như không hoạt động. Tôi nhận được 'Serial result =' được in ra, nhưng không phải là giá trị của S_RES. Tôi cho rằng tôi đang đặt S_RES đúng ngay từ đầu - đúng không? – robintw

+0

Là 'make'' GNU-make' của bạn? Nếu vậy, phiên bản là gì? Vui lòng xem chỉnh sửa. –

+0

tôi nhận được kết quả như sau: A: = abc thực hiện: A: Lệnh không tìm thấy thực hiện: *** [thử nghiệm] Lỗi 127 Và phiên bản của tôi thực hiện được GNU Make 3,81 – robintw

5

chỉ là một mặt lưu ý

này đánh giá về thời gian sử dụng, đây là nhiều lần như $ (A) được sử dụng

A = something 

này đánh giá về thời gian phân tích cú pháp, do đó giá trị là đánh giá một lần

A := something