Tôi cố gắng triển khai hệ thống xây dựng không đệ quy trong dự án hiện tại của mình. Những gì tôi đấu tranh với là phạm vi biến. Nhắm mục tiêu các biến cụ thể không phù hợp với nhu cầu của tôi vì thường biến xác định mục tiêu chứ không phải điều kiện tiên quyết. Những gì tôi cần là:GNU Make. Các biến có phạm vi giới hạn đối với một Makefile duy nhất
Makefile1:
SOMEVAR := original_value
include Makefile2
$(warning $(SOMEVAR))
Makefile2:
#some magic here to do what I want and make me happy
SOMEVAR := included_value
#and maybe here
Và kết quả tôi muốn là 'original_value'.
Có chiến lược nào để biến nó thành hiện thực không?
EDIT: Giải pháp duy nhất tôi đi cho thời điểm này là để buộc và tổ chức bản thân mình để đặt tất cả inlcudes ở cuối mỗi Makefile nói riêng và sử dụng ngay lập tức gán biến: =
Giải pháp đó nghe khá hay. Có gì sai với nó? Và cái gì là 'SOMEVAR', nó được dùng để làm gì? – Beta
Điều tôi không thích trong giải pháp này là nó rất run rẩy. Nếu một số người nghèo sẽ mất vị trí của tôi sẽ không nhận được ý tưởng và địa điểm bao gồm một nơi khác, ông sẽ nhận được tấn bất ngờ –
Nếu Makefile2 được bao gồm nhiều hơn một lần, và nó định nghĩa một công thức đề cập đến '$ (SOMEVAR)' , sau đó nó sẽ phá vỡ khủng khiếp --- các biến bên trong công thức được đánh giá khi các công thức được thực thi, có nghĩa là tất cả chúng sẽ thấy giá trị cuối cùng '$ (SOMEVAR)', chứ không phải giá trị của nó khi công thức được xác định. –