2009-04-20 27 views
5

tôi theo các hướng dẫn trên trang Using Check with the Autotools trong một nỗ lực để xây dựng trong hỗ trợ cho các đơn vị kiểm tra trong một (hiện tại) dự án C nhỏ. Mặc dù tôi đang sử dụng Cgreen thay vì Check.xách tay tương đương với GNU làm% mẫu kiểu cai trị

Tôi đang gặp sự cố với bước 9, điều này gây ra tự động phát ra cảnh báo về việc sử dụng các quy tắc mẫu kiểu `% 'là một phần mở rộng của GNU.

Các làm quy tắc cụ thể là:

check_%.$(OBJEXT) : $(srcdir)/%.c 
    $(COMPILE) -DCHECKING -c -o [email protected] $^ 

Tôi tự hỏi nếu có một cách tương đương với quy định cụ thể nguyên tắc này mà không dựa vào gnu làm phần mở rộng.

Trả lời

7

di động làm cho quy tắc chỉ có thể sử dụng hậu tố khác nhau, các tiền tố nên được như vậy.

.c.o: 
     $(COMPILE) -DCHECKING -c -o [email protected] $< 

Hậu tố không nhất thiết bắt đầu bằng dấu chấm. (Trong trường hợp đó bạn phải nói với Automake gì hậu tố của bạn, bởi vì nó không thể đoán.) Vì vậy, ví dụ bạn có thể có một cái gì đó như sau nếu bạn đổi tên check_showdns.o-showdns_check.o:

SUFFIXES = _check.o 
check_libapdns_LDADD  = @[email protected] showdns_check.o 
.c_check.o: 
     $(COMPILE) -DCHECKING -c -o [email protected] $< 
+0

lớn gợi ý. Khắc phục sự cố. Tôi đã sử dụng tiền tố _test thay vì _check. – Wes

-2

Tôi thà cố gắng vô hiệu hóa cảnh báo hoặc bỏ qua nó. GNU tạo tồn tại cho tất cả các nền tảng giống Unix có liên quan; không có lý do thực tế để dành thời gian duy trì tính di động của makefile. GNU làm cũng là tính năng vượt trội so với hầu hết các phương ngữ khác làm cho.

+0

Đó là sự thật nhưng nó sẽ được tốt đẹp không cần phải cài đặt một công cụ bổ sung khi hệ điều hành máy chủ cung cấp một trong số các hộp. – Wes

+0

Nhưng xem xét thời gian bạn phải bỏ ra duy trì một makefile cầm tay. Nếu bạn nhắm mục tiêu GNU chỉ, bạn sẽ làm cho nó * nhiều * dễ dàng hơn để viết các makefiles của bạn, và có nhiều thời gian hơn trong việc cải thiện ứng dụng của bạn và sửa các lỗi. – JesperE

+1

đẹp câu chuyện, bạn đặt tên cho Makefiles GNUMakefile tất cả các bạn như bạn nên nếu bạn nhắm mục tiêu GNU chỉ Make? Yêu cầu mọi người 'làm' thành GNU Make và không chỉ ra mong muốn phá vỡ khả năng tương thích với tiêu chuẩn thực hiện bằng cách sử dụng GNUMakefile là thực hành chuẩn bây giờ nhờ thái độ "đừng lãng phí thời gian của bạn duy trì một makefile di động" – MkV

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