¿Cómo compilar sin que las advertencias se consideren errores?

94

El problema es que el mismo código que se compila bien en Windows no se puede compilar en Ubuntu. Cada vez que recibo este error:

cc1: warnings being treated as errors

Ahora, es una gran base de código y no me gusta corregir todas las advertencias.

¿Hay alguna forma de que pueda compilar correctamente a pesar de las advertencias?

Saurabh Verma
fuente
1
Sugiero encarecidamente que intente corregir las advertencias. Si no es de inmediato, gradualmente. Una vez que lo elimine -Werror, puede volver a agregarlo por directorio, después de haber eliminado las advertencias.
ugoren
Incluso si compila correctamente, es posible que no se ejecute de la forma esperada. Algunas personas escriben código que funciona bien en Windows pero se bloquea inmediatamente en Linux.
Dennis Meng
Gracias a todos por sus útiles comentarios y respuestas. Según el requisito, parece que tengo que corregir todas las advertencias, que he comenzado. Pero ahora la advertencia que recibo es de sqlite3.c: Suponiendo que el desbordamiento firmado no ocurre cuando se supone que (X - c) <= X es siempre cierto
Saurabh Verma

Respuestas:

83

Seguro, encuentra dónde -Werrorestá configurado y quita esa bandera. Entonces las advertencias serán solo advertencias.

Daniel Fischer
fuente
2
Gracias Daniel, pero no hay ningún indicador de error en mi proyecto. ¿Debería buscarlo en otro lugar?
Saurabh Verma
13
En algún lugar debe establecerse, por defecto, las advertencias no son tratadas como errores por ningún compilador que conozco. Si no puede encontrarlo, puede intentar anularlo con -Wno-error, como sugirió Nightcracker. Eso debería funcionar a menos que -Werrorse pase después de las banderas que estableció CFLAGSen el archivo MAKE.
Daniel Fischer
31

Puede hacer que todas las advertencias se traten como tales utilizando -Wno-error. Puede hacer que las advertencias específicas se traten como tales utilizando -Wno-error=<warning name>donde <warning name>es el nombre de la advertencia que no desea que se trate como un error.

Si desea desactivar por completo todas las advertencias, use -w(no recomendado).


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

orlp
fuente
4

Si está compilando el kernel de Linux. Por ejemplo, si desea deshabilitar la advertencia de que "variable sin usar pero configurada" se ha tratado como un error. Puede agregar una declaración:

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

en tu Makefile

Andy Zhang
fuente
3

Gracias por todas las útiles sugerencias. Finalmente me aseguré de que no haya advertencias en mi código, pero nuevamente recibí esta advertencia de sqlite3:

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

que arreglé agregando el siguiente CFLAG:

-fno-strict-overflow
Saurabh Verma
fuente
Hay muchas advertencias para señalarle construcciones problemáticas en su código. Desactivarlos le permitirá seguir adelante en una perspectiva breve, pero nunca sabrá si estos problemas volverán a perseguirlo a largo plazo.
Benjamin Bannier
1
Sí, tiene usted razón. Quería decir que me aseguré de que mi código sea sin advertencias (no he desactivado todas las advertencias)
Saurabh Verma
3

-Wally -Werrorlas opciones del compilador pueden causarlo, compruebe si se utilizan en la configuración del compilador.

Marlab
fuente
3

Solución:

CFLAGS=-Wno-error ./configure
Zibri
fuente