2010-01-20 29 views
54

makefile của tôi thất bại với lỗi:"nhiều mô hình mục tiêu" Makefile lỗi

Makefile:34: *** multiple target patterns. Stop. 

hiện nó thực sự có ý nghĩa gì, làm thế nào tôi có thể sửa lỗi này?

(GNU make manual, được viết bởi Captain Rõ ràng, không giúp ích gì).


Tìm thấy. Tôi đã có quy tắc dưới hình thức:

$(FOO): bar 

trong đó FOO được đặt từ lệnh trình bao đã làm ô nhiễm thông báo lỗi có dấu hai chấm.

+0

hiện http://www-01.ibm.com/support/docview.wss?uid=swg21119863 hoặc http://sourceware.org/ml/crossgcc/2009-07/msg00006.html trợ giúp? –

+2

Google nhanh chóng tiết lộ http://groups.google.com/group/gnu.utils.help/browse_frm/thread/d7eeff06e2b8394/1c932a7ea7664ade?lnk=st&q=%22multiple+target+patterns%22&rnum=7#1c932a7ea7664ade –

+0

Những câu trả lời này chỉ là diễn giải của "bạn có nhiều mẫu mục tiêu". Chà, tôi nghĩ là không. Làm thế nào tôi có thể kiểm tra nó? Điều gì có thể kích hoạt nó? Cần phải có biện pháp phòng ngừa nào để ngăn chặn vấn đề này? – Kornel

Trả lời

41

tôi đã có nó trên Makefile

MAPS+=reverse/db.901:550:2001.ip6.arpa 
lastserial: ${MAPS} 
    ./updateser ${MAPS} 

Đó là vì các : trong tên tập tin. tôi giải quyết này với

 
         -------- notice 
        //
        v v 
MAPS+=reverse/db.901\:550\:2001.ip6.arpa 
lastserial: ${MAPS} 
    ./updateser ${MAPS} 
+0

tôi có cùng một vấn đề, nhưng tôi không hiểu câu trả lời của bạn, bạn sẽ xây dựng thêm điều này cho tôi, –

+0

là bạn nhận được tôi? –

+2

@PirFahimShah Câu trả lời là nói rằng các dấu hai chấm trong tên tệp (db.901: 550: 2001.ip6.arpa) cần phải được thoát. mcr đang thoát khỏi dấu hai chấm bằng cách đặt dấu gạch chéo ngược trước chúng. Bằng cách đó, làm cho không giải thích các dấu hai chấm như một biểu tượng đặc biệt. – Aaron

7

Bên cạnh đó cần phải thoát khỏi dấu hai chấm như trong câu trả lời ban đầu, tôi đã tìm thấy nếu thụt đầu dòng là tắt bạn có khả năng có thể nhận được cùng một vấn đề. Trong một makefile, tôi phải thay thế các khoảng trống bằng một tab và cho phép tôi vượt qua lỗi.

+0

Làm cho GNU cũng có thể báo cáo "Không có quy tắc cho mục tiêu" trong trường hợp này. – davenpcj

4

Tôi chỉ muốn thêm, nếu bạn nhận được lỗi này vì bạn đang sử dụng Cygwin thực hiện và file tự động tạo ra, bạn có thể sửa chữa nó với sed sau,

sed -e '[email protected]\\\([^ ]\)@/\[email protected]' -e '[email protected][cC]:@/cygdrive/[email protected]' -i filename.d 

Bạn có thể cần phải bổ sung thêm ký tự hơn là chỉ khoảng trống trong danh sách thoát trong số thay thế đầu tiên nhưng bạn có ý tưởng. Khái niệm ở đây là/cygdrive/c là một bí danh cho c: rằng việc tạo ra Cygwin sẽ nhận ra.

Và cũng có thể ném vào

-e '[email protected]^ \[email protected]\[email protected]' 

chỉ trong trường hợp bạn đã bắt đầu với các không gian trên tai nạn (mặc dù I/nghĩ/này sẽ thường là một lỗi "thiếu tách").

0

Tôi gặp sự cố này (dấu hai chấm trong tên mục tiêu) vì tôi có -n trong biến môi trường GREP_OPTIONS của mình. Rõ ràng, điều này đã gây ra configure để tạo ra Makefile không chính xác.

2

Tôi đã gặp lỗi tương tự. Sau khi đấu tranh, tôi thấy rằng đó là do "Không gian" trong tên thư mục.

Ví dụ:

Đầu tên thư mục của tôi là: "Qt Dự án"

Sau đó tôi thay đổi nó để: "QtProjects"

và vấn đề của tôi đã được giải quyết.

Rất đơn giản nhưng đôi khi là vấn đề lớn.

Các vấn đề liên quan