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.