Come compilare senza che gli avvisi vengano trattati come errori?


94

Il problema è che lo stesso codice che si compila bene su Windows, non è in grado di compilare su Ubuntu. Ogni volta che ricevo questo errore:

cc1: warnings being treated as errors

Ora, è una grande base di codice e non mi piace correggere tutti gli avvisi.

C'è un modo per compilare con successo nonostante gli avvertimenti?


1
Consiglio vivamente di provare a correggere gli avvisi. Se non immediatamente, gradualmente. Una volta eliminato -Werror, puoi aggiungerlo di nuovo per directory, dopo aver rimosso gli avvisi.
— ugoren

Anche se si compila correttamente, potrebbe non funzionare come previsto. Alcune persone hanno scritto codice che funziona bene su Windows ma si blocca immediatamente su Linux.
— Dennis Meng

Grazie a tutti per i loro utili commenti e risposte. In base al requisito sembra che devo correggere tutti gli avvisi, che ho avviato. Ma ora l'avvertimento che ricevo proviene da sqlite3.c: Supponendo che l'overflow firmato non si verifichi quando si assume che (X - c) <= X sia sempre vero
— Saurabh Verma

Risposte:


83

Certo, trova dove -Werrorè impostato e rimuovi quella bandiera. Quindi gli avvisi saranno solo avvisi.


2
Grazie Daniel, ma nel mio progetto non è impostato alcun flag di errore. Dovrei cercarlo da qualche altra parte?
— Saurabh Verma

13
Da qualche parte deve essere impostato, per impostazione predefinita gli avvisi non vengono trattati come errori da nessun compilatore che conosco. Se non riesci a trovarlo, puoi provare a sovrascriverlo -Wno-error, come suggerito da Nightcracker. Questo dovrebbe funzionare a meno che non -Werrorvenga passato dopo i flag impostati nel CFLAGSmakefile.
— Daniel Fischer

31

Puoi fare in modo che tutti gli avvisi vengano trattati come tali usando -Wno-error. È possibile creare avvisi specifici che vengono trattati come tali utilizzando -Wno-error=<warning name>dov'è <warning name>il nome dell'avviso che non si desidera trattare come un errore.

Se vuoi disabilitare completamente tutti gli avvisi, usa -w(sconsigliato).


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



4

Se stai compilando il kernel linux. Ad esempio, se si desidera disabilitare l'avviso che è "unused-but-set-variable" è stato considerato un errore. Puoi aggiungere una dichiarazione:

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

nel tuo Makefile


3

Grazie per tutti i suggerimenti utili. Alla fine mi sono assicurato che non ci fossero avvisi nel mio codice, ma ancora una volta ricevevo questo avviso da sqlite3:

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

che ho risolto aggiungendo la seguente CFLAG:

-fno-strict-overflow

Molti avvisi sono lì per indirizzarti a costrutti problematici nel tuo codice. Disabilitarli ti consentirà di andare avanti nella prospettiva breve, ma non saprai mai se questi problemi torneranno a perseguitarti a lungo termine.
— Benjamin Bannier

1
Si hai ragione. Volevo dire che mi sono assicurato che il mio codice fosse privo di avvisi (non ho disabilitato tutti gli avvisi)
— Saurabh Verma

3

-Walle le -Werroropzioni del compilatore possono causarlo, per favore controlla se quelle sono usate nelle impostazioni del compilatore.


3

Soluzione:

CFLAGS=-Wno-error ./configure
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.