วิธีรวบรวมโดยไม่มีคำเตือนถือว่าเป็นข้อผิดพลาด


97

ปัญหาคือโค้ดเดียวกันกับที่คอมไพล์บน Windows ไม่สามารถคอมไพล์บน Ubuntu ได้ ทุกครั้งที่ฉันได้รับข้อผิดพลาดนี้:

cc1: warnings being treated as errors

ตอนนี้มันเป็นฐานรหัสขนาดใหญ่และฉันไม่ชอบแก้ไขคำเตือนทั้งหมด

มีวิธีใดบ้างที่ฉันสามารถรวบรวมได้สำเร็จทั้งๆที่มีคำเตือน


1
ฉันขอแนะนำอย่างยิ่งให้พยายามแก้ไขคำเตือน ถ้าไม่ทันก็ค่อยๆ เมื่อคุณกำจัด-Werrorคุณสามารถเพิ่มกลับเป็นรายไดเร็กทอรีได้หลังจากที่คุณลบคำเตือนแล้ว
ugoren

แม้ว่าคุณจะคอมไพล์สำเร็จ แต่คอมไพล์อาจไม่เป็นไปตามที่คุณคาดหวัง ฉันมีคนสองสามคนเขียนโค้ดที่ใช้งานได้ดีบน Windows แต่ขัดข้องทันทีบน Linux
Dennis Meng

ขอบคุณทุกคนสำหรับความคิดเห็นและคำตอบที่เป็นประโยชน์ ตามข้อกำหนดดูเหมือนว่าฉันต้องแก้ไขคำเตือนทั้งหมดซึ่งฉันได้เริ่มต้นแล้ว แต่ตอนนี้คำเตือนที่ฉันได้รับมาจาก sqlite3.c: สมมติว่ามีการลงนามล้นไม่เกิดขึ้นเมื่อสมมติว่า (X - c) <= X เป็นจริงเสมอ
Saurabh Verma

คำตอบ:


85

ได้เลยค้นหาตำแหน่งที่ตั้ง-Werrorค่าไว้และลบค่าสถานะนั้นออก จากนั้นคำเตือนจะเป็นเพียงคำเตือนเท่านั้น


2
ขอบคุณ Daniel แต่ไม่มีการตั้งค่าสถานะ -Werror ในโครงการของฉัน ฉันควรมองหาที่อื่นหรือไม่?
Saurabh Verma

13
บางแห่งต้องตั้งค่าโดยค่าเริ่มต้นคำเตือนจะไม่ถือว่าเป็นข้อผิดพลาดโดยคอมไพเลอร์ใด ๆ ที่ฉันรู้จัก หากหาไม่พบคุณสามารถลองลบล้างได้-Wno-errorตามที่ nightcracker แนะนำ สิ่งนี้ควรใช้งานได้เว้นแต่-Werrorจะมีการส่งผ่านหลังจากแฟล็กที่คุณตั้งค่าไว้ในCFLAGSmakefile
Daniel Fischer

34

-Wno-errorคุณสามารถทำให้คำเตือนทั้งหมดได้รับการรักษาเช่นการใช้ คุณสามารถทำให้คำเตือนที่เฉพาะเจาะจงได้รับการปฏิบัติเช่นนี้โดยใช้-Wno-error=<warning name>ที่<warning name>เป็นชื่อของการเตือนที่คุณไม่ต้องการให้ถือว่าเป็นความผิดพลาด

หากคุณต้องการปิดคำเตือนทั้งหมดให้ใช้-w(ไม่แนะนำ)


ที่มา: http://gcc.gnu.org/onlinedocs/gcc-4.3.2/gcc/Warning-Options.html




4

หากคุณกำลังคอมไพล์เคอร์เนล linux ตัวอย่างเช่นหากคุณต้องการปิดใช้งานคำเตือนที่ว่า "unused-but-set-variable" จะถือว่าเป็นข้อผิดพลาด คุณสามารถเพิ่มคำสั่ง:

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

ใน Makefile ของคุณ


3

ขอบคุณสำหรับคำแนะนำที่เป็นประโยชน์ ในที่สุดฉันก็แน่ใจว่าไม่มีคำเตือนในรหัสของฉัน แต่อีกครั้งได้รับคำเตือนนี้จาก sqlite3:

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

ซึ่งฉันแก้ไขโดยการเพิ่ม CFLAG ต่อไปนี้:

-fno-strict-overflow

มีคำเตือนมากมายเพื่อชี้ให้คุณเห็นโครงสร้างที่มีปัญหาในโค้ดของคุณ การปิดใช้งานจะช่วยให้คุณก้าวต่อไปในมุมมองสั้น ๆ แต่คุณจะไม่มีทางรู้ว่าปัญหาเหล่านี้จะกลับมาหลอกหลอนคุณในระยะยาวหรือไม่
Benjamin Bannier

1
ใช่คุณถูก. ฉันหมายความว่าฉันได้ตรวจสอบให้แน่ใจว่ารหัสของฉันไม่มีการเตือน (ฉันไม่ได้ปิดการใช้งานคำเตือนทั้งหมด)
Saurabh Verma

3

-Wallและ-Werrorตัวเลือกคอมไพเลอร์อาจทำให้เกิดได้โปรดตรวจสอบว่ามีการใช้สิ่งเหล่านี้ในการตั้งค่าคอมไพเลอร์

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.