Comment compiler sans que les avertissements soient traités comme des erreurs?

94

Le problème est que le même code qui se compile bien sur Windows, est incapable de compiler sur Ubuntu. Chaque fois que j'obtiens cette erreur:

cc1: warnings being treated as errors

Maintenant, c'est une grosse base de code et je n'aime pas corriger tous les avertissements.

Est-il possible que je puisse compiler avec succès malgré les avertissements?

Saurabh Verma
la source
1
Je suggère fortement d'essayer de corriger les avertissements. Si ce n'est pas immédiatement, puis progressivement. Une fois que vous vous en êtes débarrassé -Werror, vous pouvez le rajouter sur une base par répertoire, après avoir supprimé les avertissements.
ugoren
Même si vous compilez correctement, il se peut qu'il ne s'exécute pas comme vous le souhaitez. Quelques personnes ont écrit du code qui fonctionne très bien sous Windows mais qui plante immédiatement sous Linux.
Dennis Meng
Merci à tous pour leurs commentaires et réponses utiles. Selon l'exigence, il semble que je doive corriger tous les avertissements, ce que j'ai commencé. Mais maintenant, l'avertissement que je reçois vient de sqlite3.c: en supposant que le dépassement de capacité signé ne se produit pas en supposant que (X - c) <= X est toujours vrai
Saurabh Verma

Réponses:

83

Bien sûr, trouvez où -Werrorest défini et supprimez cet indicateur. Les avertissements ne seront alors que des avertissements.

Daniel Fischer
la source
2
Merci Daniel, mais il n'y a pas d'indicateur -Werror dans mon projet. Dois-je le chercher ailleurs?
Saurabh Verma
13
Quelque part, il doit être défini, par défaut, les avertissements ne sont pas traités comme des erreurs par les compilateurs que je connais. Si vous ne le trouvez pas, vous pouvez essayer -Wno-errorde le remplacer par , comme le suggère nightcracker. Cela devrait fonctionner à moins que le ne -Werrorsoit passé après les indicateurs que vous avez définis CFLAGSdans le fichier Make.
Daniel Fischer
31

Vous pouvez faire en sorte que tous les avertissements soient traités comme tels en utilisant -Wno-error. Vous pouvez créer des avertissements spécifiques traités comme tels en utilisant -Wno-error=<warning name><warning name>est le nom de l'avertissement que vous ne voulez pas voir traité comme une erreur.

Si vous souhaitez désactiver entièrement tous les avertissements, utilisez -w(non recommandé).


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

orlp
la source
4

Si vous compilez le noyau Linux. Par exemple, si vous souhaitez désactiver l'avertissement qui est "inutilisé-mais-set-variable" a été traité comme une erreur. Vous pouvez ajouter une déclaration:

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

dans votre Makefile

Andy Zhang
la source
3

Merci pour toutes les suggestions utiles. Je me suis enfin assuré qu'il n'y avait aucun avertissement dans mon code, mais encore une fois, je recevais cet avertissement de sqlite3:

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

que j'ai corrigé en ajoutant le CFLAG suivant:

-fno-strict-overflow
Saurabh Verma
la source
De nombreux avertissements sont là pour vous signaler des constructions problématiques dans votre code. Les désactiver vous permettra de passer à autre chose dans une perspective à court terme, mais vous ne saurez jamais si ces problèmes reviendront vous hanter à long terme.
Benjamin Bannier
1
Oui, tu as raison. Je voulais dire que je me suis assuré que mon code est sans avertissement (je n'ai pas désactivé tous les avertissements)
Saurabh Verma
3

-Wallet -Werrorles options du compilateur peuvent en être la cause, veuillez vérifier si elles sont utilisées dans les paramètres du compilateur.

Marlab
la source
3

Solution:

CFLAGS=-Wno-error ./configure
Zibri
la source