Bagaimana cara mengkompilasi tanpa peringatan diperlakukan sebagai kesalahan?

94

Masalahnya adalah kode yang sama yang dapat dikompilasi dengan baik di Windows, tidak dapat dikompilasi di Ubuntu. Setiap kali saya mendapatkan kesalahan ini:

cc1: warnings being treated as errors

Sekarang, ini basis kode yang besar dan saya tidak suka memperbaiki semua peringatan.

Apakah ada cara agar saya dapat berhasil mengompilasi meskipun ada peringatan?

Saurabh Verma
sumber
1
Saya sangat menyarankan untuk mencoba memperbaiki peringatan. Jika tidak segera, maka bertahap. Setelah Anda menghapusnya -Werror, Anda dapat menambahkannya kembali per direktori, setelah Anda menghapus peringatan.
ugoren
Bahkan jika Anda berhasil mengompilasi, itu mungkin tidak berjalan seperti yang Anda harapkan. Saya pernah meminta beberapa orang menulis kode yang berfungsi dengan baik di Windows tetapi langsung mogok di Linux.
Dennis Meng
Terima kasih semuanya atas komentar dan jawaban mereka yang berguna. Menurut persyaratan, tampaknya saya harus memperbaiki semua peringatan yang sudah saya mulai. Tapi sekarang peringatan yang saya dapatkan adalah dari sqlite3.c: Dengan asumsi bahwa limpahan yang ditandatangani tidak terjadi ketika mengasumsikan bahwa (X - c) <= X selalu benar
Saurabh Verma

Jawaban:

83

Oke, temukan di mana -Werrordisetel dan hapus bendera itu. Maka peringatan hanya akan menjadi peringatan.

Daniel Fischer
sumber
2
Terima kasih Daniel, tetapi tidak ada tanda -Keror yang disetel dalam proyek saya. Haruskah saya mencarinya di tempat lain?
Saurabh Verma
13
Di suatu tempat itu harus disetel, secara default peringatan tidak diperlakukan sebagai kesalahan oleh kompilator yang saya tahu. Jika Anda tidak dapat menemukannya, Anda dapat mencoba -Wno-errormenggantinya dengan , seperti yang disarankan oleh nightcracker. Itu akan berfungsi kecuali jika -Werrorditeruskan setelah flag yang Anda setel di CFLAGSmakefile.
Daniel Fischer
32

Anda dapat membuat semua peringatan diperlakukan seperti itu menggunakan -Wno-error. Anda bisa membuat peringatan tertentu diperlakukan seperti itu dengan menggunakan -Wno-error=<warning name>where <warning name>adalah nama peringatan yang Anda tidak ingin diperlakukan sebagai kesalahan.

Jika Anda ingin menonaktifkan semua peringatan sepenuhnya , gunakan -w(tidak disarankan).


Sumber: http://gcc.gnu.org/onlinedocs/gcc-4.3.2/gcc/Warning-Options.html

orlp
sumber
4

Jika Anda sedang mengkompilasi kernel linux. Misalnya, jika Anda ingin menonaktifkan peringatan "unused-but-set-variable" dianggap sebagai kesalahan. Anda dapat menambahkan pernyataan:

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

di Makefile Anda

Andy Zhang
sumber
4

Larutan:

CFLAGS=-Wno-error ./configure
Zibri
sumber
3

Terima kasih atas semua saran yang berguna. Saya akhirnya memastikan bahwa tidak ada peringatan dalam kode saya, tetapi sekali lagi saya mendapatkan peringatan ini dari sqlite3:

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

yang saya perbaiki dengan menambahkan CFLAG berikut:

-fno-strict-overflow
Saurabh Verma
sumber
Banyak peringatan yang mengarahkan Anda ke konstruksi bermasalah dalam kode Anda. Menonaktifkannya akan memungkinkan Anda melanjutkan dalam perspektif singkat, tetapi Anda tidak akan pernah tahu apakah masalah ini akan kembali menghantui Anda dalam jangka panjang.
Benjamin Bannier
1
Ya kamu benar. Maksud saya, saya telah memastikan bahwa kode saya bebas peringatan (saya belum menonaktifkan semua peringatan)
Saurabh Verma
3

-Walldan -Werroropsi kompilator dapat menyebabkannya, periksa apakah itu digunakan dalam pengaturan kompilator.

Marlab
sumber