Làm thế nào để biên dịch mà không có cảnh báo bị coi là lỗi?


94

Vấn đề là cùng một mã biên dịch tốt trên Windows, không thể biên dịch trên Ubuntu. Mỗi khi tôi gặp lỗi này:

cc1: warnings being treated as errors

Bây giờ, đó là cơ sở mã lớn và tôi không muốn sửa tất cả các cảnh báo.

Có cách nào tôi có thể biên dịch thành công bất chấp các cảnh báo không?


1
Tôi thực sự khuyên bạn nên cố gắng sửa các cảnh báo. Nếu không ngay lập tức, sau đó dần dần. Sau khi loại bỏ -Werror, bạn có thể thêm lại nó trên cơ sở từng thư mục, sau khi đã loại bỏ các cảnh báo.
ugoren 19/07/12

Ngay cả khi bạn biên dịch thành công, nó có thể không chạy theo cách bạn mong đợi. Tôi đã có một vài người viết mã hoạt động tốt trên Windows nhưng bị treo ngay lập tức trên Linux.
Dennis Meng

Cảm ơn mọi người vì những bình luận và câu trả lời hữu ích của họ. Theo yêu cầu có vẻ như tôi phải sửa tất cả các cảnh báo, mà tôi đã bắt đầu. Nhưng bây giờ các cảnh báo tôi nhận được là từ sqlite3.c: Giả sử tràn ký không xảy ra khi giả định rằng (X - c) <= X luôn luôn đúng
Saurabh Verma

Câu trả lời:


83

Chắc chắn, hãy tìm nơi -Werrorđược đặt và xóa cờ đó. Khi đó cảnh báo sẽ chỉ là cảnh báo.


2
Cảm ơn Daniel, nhưng không có cờ -Werror được đặt trong dự án của tôi. Tôi có nên tìm nó ở một nơi khác không?
Saurabh Verma,

13
Ở đâu đó nó phải được đặt, theo mặc định, cảnh báo không được coi là lỗi bởi bất kỳ trình biên dịch nào tôi biết. Nếu bạn không thể tìm thấy nó, bạn có thể thử ghi đè nó bằng -Wno-error, như nightcracker đã đề xuất. Điều đó sẽ hoạt động trừ khi -Werrorđược chuyển sau các cờ bạn đã đặt trong CFLAGSmakefile.
Daniel Fischer,

31

Bạn có thể thực hiện tất cả các cảnh báo đang được xử lý như vậy bằng cách sử dụng -Wno-error. Bạn có thể đưa ra các cảnh báo cụ thể đang được xử lý như vậy bằng cách sử dụng -Wno-error=<warning name>đâu <warning name>là tên của cảnh báo mà bạn không muốn bị coi là lỗi.

Nếu bạn muốn tắt hoàn toàn tất cả các cảnh báo, hãy sử dụng -w(không được khuyến nghị).


Nguồn: http://gcc.gnu.org/onlineocs/gcc-4.3.2/gcc/Warning-Options.html



4

Nếu bạn đang biên dịch hạt nhân linux. Ví dụ: nếu bạn muốn tắt cảnh báo rằng "biến không sử dụng nhưng-set-biến" được coi là lỗi. Bạn có thể thêm một tuyên bố:

KBUILD_CFLAGS += $(call cc-option,-Wno-error=unused-but-set-variable,)

trong Makefile của bạn


3

Cảm ơn vì tất cả những gợi ý hữu ích. Cuối cùng tôi đã đảm bảo rằng không có cảnh báo nào trong mã của mình, nhưng lại nhận được cảnh báo này từ sqlite3:

Assuming signed overflow does not occur when assuming that (X - c) <= X is always true

mà tôi đã sửa bằng cách thêm CFLAG sau:

-fno-strict-overflow

Có nhiều cảnh báo để chỉ cho bạn các cấu trúc có vấn đề trong mã của bạn. Vô hiệu hóa chúng sẽ cho phép bạn tiếp tục trong viễn cảnh ngắn hạn, nhưng bạn sẽ không bao giờ biết liệu những vấn đề này có quay lại ám ảnh bạn về lâu dài hay không.
Benjamin Bannier

1
Vâng, bạn đã đúng. Tôi đã có nghĩa là tôi đã thực hiện chắc chắn rằng mã của tôi được cảnh báo miễn phí (tôi đã không vô hiệu hóa tất cả những lời cảnh báo)
Saurabh Verma

3

-Wall-Werrorcác tùy chọn trình biên dịch có thể gây ra nó, vui lòng kiểm tra xem chúng có được sử dụng trong cài đặt trình biên dịch hay không.


Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.