Trong dự án phần mềm tôi đang làm việc, chúng tôi sử dụng một số thư viện của bên thứ ba, thật đáng buồn, tạo ra cảnh báo gcc gây phiền nhiễu. Chúng tôi đang nỗ lực để làm sạch tất cả các mã cảnh báo và muốn bật cờ cảnh báo-coi-lỗi (-Werror) trong GCC. Có cách nào để thực hiện cảnh báo do bên thứ ba này tạo ra mà chúng tôi không thể khắc phục, biến mất không?Cách loại bỏ cảnh báo lib/bên thứ ba bên ngoài trong GCC
Trả lời
Tôi đoán bạn đang nói về các cảnh báo đến từ tiêu đề thư viện của bên thứ ba.
Các giải pháp cụ thể GCC sẽ được tạo ra một tập tin tiêu đề wrapper trong đó có bản chất hai dòng:
#pragma GCC system_header
#include "real_3rd_party_header.h"
Và sử dụng các wrapper thay vì tiêu đề bên thứ 3 gốc.
Kiểm tra another SO response nêu chi tiết pragma. Về cơ bản nó nói với GCC rằng điều này (với các tệp được đệ quy) là một tiêu đề hệ thống, và không có thông điệp cảnh báo nào được tạo ra.
Nếu không, tôi không biết cách người ta có thể tắt cảnh báo đến từ mã của bên thứ ba. Ngoại trừ bởi sức mạnh vũ phu của khóa học: trong hệ thống xây dựng cấu hình các tập tin được xây dựng với cảnh báo tắt.
http://www.artima.com/cppsource/codestandards.html
Ví dụ 1: Một tập tin tiêu đề của bên thứ ba. Tệp tiêu đề thư viện mà bạn không thể thay đổi có thể chứa cấu trúc nguyên nhân (có thể là lành tính) cảnh báo. Sau đó, hãy quấn tệp bằng phiên bản của riêng bạn #includes tiêu đề gốc và chọn lọc chỉ cảnh báo ồn ào cho phạm vi đó, rồi #include wrapper trong suốt phần còn lại của dự án.
Sử dụng -isystem
Ví dụ:
gcc -I./src/ -isystem /usr/include/boost/ -c file.c -o obj/file.o
Với -isystem NO cảnh báo về tăng: D
Đây là giải pháp tốt hơn nhiều so với việc tạo trình bao bọc. –
Nếu bạn đang sử dụng CMake, bạn có thể đạt được điều này bằng cách thêm SYSTEM
để include_directories
:
include_directories(SYSTEM "${LIB_DIR}/Include")
^^^^^^
Tôi đã thử nghiệm điều này dưới GCC và nó hoạt động tốt, nhưng nó không làm bất cứ điều gì dưới MSVC. Không bất ngờ vì MSVC dường như không có bất kỳ cách nào để chỉ định thư mục tiêu đề hệ thống (nghĩa là hệ thống của GCC), nhưng cần lưu ý điều gì đó nếu bạn cần hỗ trợ MSVC. – Kevin
Dường như không làm gì cho tôi trên Xcode/Clang. –
- 1. Làm cách nào để loại bỏ cảnh báo trong CheckStyle?
- 2. Cảnh báo GCC [Wuninitialized]
- 3. Loại bỏ thông báo cảnh báo C trong R
- 4. Làm thế nào để chặn cảnh báo của bên thứ ba bằng cách sử dụng cảnh báo.filterwarnings
- 5. Cách loại bỏ cảnh báo: Sử dụng '$' thay vì '.' cho các lớp bên trong trong Eclipse
- 6. Eclipse - cách loại bỏ bóng đèn trên các cảnh báo
- 7. Loại bỏ "gcc -/usr/bin/ld: không tìm thấy cảnh báo lib"
- 8. JAXB: @XmlTransient trên siêu hạng của bên thứ ba hoặc bên ngoài
- 9. Làm thế nào để loại bỏ cảnh báo GCC trên vùng #pragma?
- 10. tắt cảnh báo cụ thể trong gcc
- 11. Loại bỏ flash cảnh báo giao meta-chính sách
- 12. Làm cho Xcode bỏ qua LLVM xây dựng cảnh báo trong dự án của bên thứ 3
- 13. Loại bỏ lỗi "thêm"; "" trong GCC khi -pantic là trên
- 14. Làm cho một gcc cảnh báo lỗi?
- 15. Truy cập cookie của bên thứ ba trong Firefox
- 16. JavaScript và cookie của bên thứ ba
- 17. Các loại bên thứ ba sẽ được hiển thị trong API
- 18. Ghi đè bên thứ ba JS
- 19. Cảnh báo Xcode tham chiếu tài khoản người dùng đã phát triển thư viện của bên thứ ba
- 20. Loại bỏ g ++ cảnh báo cho mẫu tham số
- 21. Đoạn Visual Studio của bên thứ ba
- 22. cảnh báo :: loại cảnh báo và FATAL trong Perl
- 23. Tại sao loại bỏ vòng loại dễ bay hơi trong một hàm gọi cảnh báo?
- 24. cảnh báo cơ sở dữ liệu loại bỏ
- 25. Xcode: Loại bỏ cảnh báo lớp học chuyển tiếp
- 26. Cách Go cập nhật gói của bên thứ ba?
- 27. GCC cảnh báo về dereference ngầm
- 28. trái bên ngoài tham gia ba bảng trong oracle
- 29. Tìm giấy phép của bên thứ ba với Nuget
- 30. Cách nhanh nhất để tìm giá trị cao nhất/thứ hai thứ ba (thứ ba ...) trong vector hoặc cột
Phiên bản gcc nào? –
Greg - cảm ơn, sẽ làm. Sam - g ++ 4.1.2 – Michael