Vấn đề này đã được báo cáo với GNU làm cho bảo trì:
http://savannah.gnu.org/bugs/?28230
Nó được khép lại với những nhận xét sau đây:
Như Philip đề cập, điều này được dự định/hành vi tài liệu .
Tôi khuyên bạn nên sử dụng "bao gồm" thay vì eval; để tập lệnh của bạn viết ra một tệp, sau đó bao gồm tệp đó.
ADDED: Có giải pháp thay thế! Dưới đây là một GNUmakefile mẫu (thay thế 8 chỗ bởi các tab; vâng, có hai dòng trống sau khi define newline
):
define newline
endef
$(eval $(subst #,$(newline),$(shell { echo 'war:'; echo ' echo "not love?"'; echo ' echo "Give peace a chance!"'; } | tr '\n' '#')))
Tổng quát hơn, đó là $(eval $(subst #,$(newline),$(shell myscript | tr '\n' '#')))
Bạn phải chọn một nhân vật sẽ không xuất hiện trong đầu ra của tập lệnh; #
có vẻ là một ứng cử viên tốt.
+10 nếu có thể. Đó là một giải pháp thanh lịch và khá di động. –
Không hoạt động .. _cho me_. Tôi chỉ nhận được các biến thể khi 'make:" makefile_fragment "được cập nhật.' –
alex gray: thử [thêm một phụ thuộc vào' Makefile' chính nó] (http://make.mad-scientist.net/constructed-include- tập tin /) - 'makefile_fragment: $ (MAKEFILE_LIST)' – rampion