2012-06-02 60 views
5
  1. Có thể đối xử với cảnh báo là lỗi trong một Makfile (và do đó thoát trước khi tiền Makefile)Cách xử lý cảnh báo dưới dạng lỗi trong Makefile?

  2. Bên cạnh đó, là nó có thể lọc ra mà cảnh báo mang lại một lỗi?

trường hợp sử dụng của tôi: Tôi muốn sử dụng --warn-undefined-variables kết hợp với điều này để Makefile sẽ thoát khi một biến là undefined, mà là một nguồn rất phổ biến của lỗi. Rõ ràng là tôi không muốn tự kiểm tra từng biến vì đây là lỗi dễ bị lỗi/tẻ nhạt. Tôi không thể tìm thấy bất cứ điều gì về điều này, nhưng nó là một tính năng khá quan trọng/cơ bản.

Lưu ý: Tôi không tìm kiếm -Werror là lệnh cụ thể của gcc không áp dụng cho trường hợp sử dụng của tôi.

+1

Chào mừng bạn đến với StackOverflow. Thiết kế ở đây là "một câu hỏi cho mỗi bài đăng", vì vậy có thể có một câu trả lời rõ ràng. Nhiều câu hỏi có nghĩa là nhiều hơn một câu trả lời có thể đúng (tôi trả lời câu hỏi 1, một người khác trả lời câu hỏi 2), và không thể chọn một câu trả lời duy nhất là câu trả lời được chấp nhận. Vui lòng xem lại [FAQ] (http://stackoverflow.com/faq) để bạn sẽ quen thuộc hơn với cách hoạt động của SO. Cảm ơn. –

+2

Điều này có vẻ như là một câu hỏi hợp lý đối với tôi. Đáng buồn thay, tôi nghi ngờ rằng câu trả lời là 1) không, 2) tranh luận, và 3) khó khăn. – Beta

+0

Nó phụ thuộc vào ý của bạn là 'biến không xác định', nhưng các biến không có giá trị ('VAR =') có thể khá quan trọng (bất cứ điều gì ngoài một lỗi). Tôi thường xuyên gặp các biến không sử dụng; đó là một định nghĩa đã từng có (có lẽ) được sử dụng trong makefile nhưng không còn nữa. –

Trả lời

2

Phiên bản tạo tiêu chuẩn không hỗ trợ những gì bạn đang tìm kiếm. Tuy nhiên, nó không phải là khó khăn để xây dựng phiên bản của riêng bạn thực hiện để hoàn thành trường hợp sử dụng của bạn.

Nhìn vào mã nguồn của làm cho 3,82, hãy kiểm tra vĩ mô warn_undefined trong variable.h:

214 /* Warn that NAME is an undefined variable. */ 
215 
216 #define warn_undefined(n,l) do{\ 
217        if (warn_undefined_variables_flag) \ 
218         error (reading_file, \ 
219          _("warning: undefined variable `%.*s'"), \ 
220         (int)(l), (n)); \ 
221        }while(0) 

tôi đã không cố gắng này, nhưng tôi nghĩ rằng nó sẽ là đủ để thay thế error với fatal.

3

Nếu bạn chuẩn bị thêm phụ thuộc vào mọi mục tiêu, bạn có thể cảnh báo thành lỗi.

Đây là một làm cho tập tin với một lỗi trong nó ("Các SRC" thay vì "SRC"):

# Turn on the warning we want 
MAKEFLAGS += --warn-undefined-variables 

# Make sure MAKECMDGOALS is defined, so it doesn't cause an error itself 
ifndef MAKECMDGOALS 
MAKECMDGOALS = all 
endif 

SRC=hello.c 

all: compile 

# Fails if the Makefile contains any warnings. 
# Run this Makefile with the same goals, but with the -n flag. 
# Grep for warnings, and fail if any are found. 
no-make-warnings: 
    ! make -n $(MAKECMDGOALS) 2>&1 >/dev/null | grep warning 

# Targets you want to check must depend on no-make-warnings 
compile: no-make-warnings 
    gcc -o hello $(SRCS) 

Khi tôi chạy nó, tôi thấy điều này:

$ make 
! make -n all 2>&1 >/dev/null | grep warning 
Makefile:17: warning: undefined variable `SRCS' 
make: *** [no-make-warnings] Error 1 

Bạn chỉ cần phải thực hiện mọi mục tiêu mà bạn muốn được kiểm tra phụ thuộc vào mục tiêu no-make-warnings.

Nếu ai đó biết cách tự động làm điều đó, vui lòng gọi điện.

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