Tôi đã sử dụng các quy tắc lạ như thế này trong một thời gian dài, nhưng đột nhiên họ đang phá vỡ môi trường mới.% và * cùng nhau trên dòng phụ thuộc
Có cách nào hiệu quả để thực hiện việc này không?
all: test.1.out
test.%.out: %/test*.out
/bin/cp -f $< [email protected]
Trên hộp của tôi (ubuntu):
alishan:~/Dropbox/make_insanity> make --version
GNU Make 3.81
Copyright (C) 2006 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.
There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A
PARTICULAR PURPOSE.
This program built for x86_64-pc-linux-gnu
alishan:~/Dropbox/make_insanity> make
/bin/cp -f 1/test.out test.1.out
Không có vấn đề với loại mã này trên máy Mac của người khác, máy ubuntu, ubuntu máy ảo. Không biết tất cả các phiên bản của họ, nhưng nó có vẻ giống như mã OK.
Trên máy chủ mageia của tôi trong cùng một thư mục sau khi xóa.
[[email protected] make_insanity]$ make --version
GNU Make 3.82
Built for x86_64-mageia-linux-gnu
Copyright (C) 2010 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
[[email protected] make_insanity]$ make
make: *** No rule to make target `test.1.out', needed by `all'. Stop.
[[email protected] make_insanity]$
Thay đổi hoặc các %
hoặc *
cho văn bản "sửa chữa" thích hợp vấn đề, nhưng dĩ nhiên không tạo ra tính tổng quát mong muốn.
Đã được đề xuất với tôi rằng thay đổi từ thực hiện 3,81 đến 3,82 là thủ phạm có khả năng xảy ra. Tôi nhìn vào các ghi chú phát hành nhưng không tìm thấy bất cứ điều gì dường như áp dụng. https://lists.gnu.org/archive/html/make-alpha/2010-07/msg00025.html –