J'ai un projet qui utilise des bibliothèques log4cxx, boost, etc. dont les en-têtes génèrent de nombreux avertissements (répétitifs). Existe-t-il un moyen de supprimer les avertissements des inclusions de bibliothèque (c'est-à-dire #include <some-header.h>) ou des inclusions de certains chemins? Je voudrais utiliser -Wall et / ou -Wextra comme d'habitude sur le code du projet sans que les informations pertinentes soient masquées. J'utilise actuellement grep sur make output mais j'aimerais quelque chose de mieux.
126
extern "C"
, conduisant à des erreurs étranges sur la liaison C si vous avez#include
un en-tête C ++ dans un-isystem
chemin.Pour ceux qui utilisent CMake, vous pouvez modifier vos
include_directories
directives pour inclure le symboleSYSTEM
qui supprime les avertissements contre de tels en-têtes.la source
${LIBFOO_USE_FILE}
variable à utiliser avec la commande include () de CMake ?easylogging++
et j'obtiens la même énorme quantité d'avertissements de laeasylogging++.h
même si le dossier où il réside a été inclus avec l'SYSTEM
option.Vous pouvez utiliser des pragmas. Par exemple:
la source
gcc
cl
a aussi la capacité depuis des années ... Parfois,gcc
c'est un peu lent à s'adapter.J'ai trouvé le truc. Pour la bibliothèque inclut, au lieu de l'
-Idir
utiliser-isystem dir
dans le makefile. GCC traite alors boost etc. comme le système inclut et ignore tout avertissement de leur part.la source
#pragma
sont des instructions au compilateur. vous pouvez définir quelque chose avant le #include et le désactiver après.Vous pouvez également le faire en ligne de commande .
Une autre page GCC spécifiquement sur la désactivation des avertissements .
J'opterais pour l'option d'utiliser # pragma dans le code source, puis de fournir un son raison (en commentaire) de la raison pour laquelle vous désactivez les avertissements. Cela impliquerait un raisonnement sur les fichiers d'en-têtes.
GCC aborde cela en classant les types d'avertissement. Vous pouvez les classer comme avertissements ou pour être ignorés. Les articles précédemment liés vous montreront quels avertissements peuvent être désactivés.
Remarque: vous pouvez également masser le code source pour éviter certains avertissements en utilisant des attributs ; cependant, cela vous lie assez étroitement à GCC.
Note 2: GCC utilise également l' interface pop / push telle qu'utilisée dans le compilateur de Microsoft - Microsoft désactive les avertissements via cette interface. Je vous suggère d'enquêter plus avant, car je ne sais pas si c'est même possible.
la source
Vous pouvez essayer d'utiliser des en- têtes précompilés . Les avertissements ne disparaîtront pas, mais au moins ils n'apparaîtront pas dans votre compilation principale.
la source
-isystem
, mais n'oubliez pas de l'utiliser à la fois pour compiler l'en-tête et dans le code)Si vous avez besoin de remplacer explicitement un en-tête système, vous êtes limité aux pragmas. Vous pouvez vérifier les inclusions que vous utilisez via la
make depend
sortie.Voir également le diagnostic push-pop pour gcc> = 4.6
la source
Mettre ce qui suit
désactivera les avertissements GCC pour tout le code suivant dans ce fichier.
la source
Il doit y avoir des raisons à ces avertissements. Celles-ci seront soit causées par des erreurs dans votre code qui utilise la bibliothèque, soit par des erreurs dans le code de la bibliothèque lui-même. Dans le premier cas, corrigez votre code. Dans le second cas, arrêtez d'utiliser la bibliothèque ou s'il s'agit de code FOSS, corrigez-le.
la source