Tôi đang quan sát một hành vi thú vị của việc thực hiện và tôi tự hỏi nếu có một lời giải thích hợp lý cho nó bên cạnh một lỗi trong gmake.quy tắc mẫu makefile không có công thức nấu ăn
Hãy nói rằng chúng tôi đã điều sau đây trong makefile:
%-animal:
echo "$* is an animal"
%-fox: %-fox-animal
%-wolf: %-wolf-animal
Sự khác biệt giữa hai mục tiêu cuối cùng là "% -wolf" không có bất kỳ công thức, và "% -fox" có một công thức có sản phẩm nào (tức là chỉ một dòng có một thẻ ở đầu).
Khi chúng tôi cố gắng thực hiện các quy tắc, đây là những gì sẽ xảy ra:
[[email protected] tmp]# make freddy-animal
echo "freddy is an animal"
freddy is an animal
[[email protected] tmp]# make freddy-wolf
make: *** No rule to make target `freddy-wolf'. Stop.
[[email protected] tmp]# make freddy-fox
echo "freddy-fox is an animal"
freddy-fox is an animal
i.e.the quy tắc mẫu mà có một công thức (mặc dù là một sản phẩm nào) hoạt động, một trong đó không làm thì không. Tôi có thiếu thứ gì đó theo cách mà nó phải làm việc không?
Điều bạn gọi là 'công thức', thực hiện quy tắc của cuộc gọi để thực hiện '. Vì vậy, thông điệp của nó đồng ý với những gì bạn nghĩ rằng nó nên làm: có một quy tắc cho freddy-wolf, nhưng không có quy tắc '* để làm cho * freddy-wolf. – reinierpost
@reinierpost: GNU Tạo phiên bản 3.82 bao gồm tìm kiếm tài liệu sử thi/thay thế tạo thuật ngữ 'công thức' cho tập lệnh được sử dụng để cập nhật mục tiêu của quy tắc. Vì vậy, (1) nó không chỉ là thuật ngữ của m1tk4 và (2) đây cũng là một điều bất ngờ đối với tôi. Xem r1.51 của http://cvs.savannah.gnu.org/viewvc/make/doc/make.texi?root=make&view=log –
@John Marshall: hmmm ... tốt để biết, cảm ơn bạn. (Tôi đang ở mức 3.81 cho đến khi Cygwin cập nhật nó.) – reinierpost