Comment définir le niveau d'avertissement pour un projet (pas pour toute la solution) à l'aide de CMake ? Devrait fonctionner sur Visual Studio et GCC .
J'ai trouvé diverses options mais la plupart semblent ne pas fonctionner ou ne sont pas cohérentes avec la documentation.
cmake
warning-level
Wernight
la source
la source
/Wall
indicateur (qui est nomméEnableAllWarnings
). Il produit encore plus d'avertissements que/W4
. Cependant, d'après mon expérience, cela produit beaucoup trop d'avertissements./Wall
est utilisable si vous souhaitez suivre une stratégie «soustractive» pour les avertissements, tout comme celle de clang-Weverything
. Au lieu de sélectionner les avertissements à activer, vous activez tout, puis sélectionnez des avertissements spécifiques à désactiver.Dans CMake moderne, ce qui suit fonctionne bien:
Mon collègue a suggéré une version alternative:
Remplacez-le
${TARGET_NAME}
par le nom réel de la cible.-Werror
est facultatif, il transforme tous les avertissements en erreurs.Ou utilisez
add_compile_options(...)
si vous souhaitez l'appliquer à toutes les cibles comme suggéré par @aldo dans les commentaires.Assurez-vous également de comprendre la différence entre
PRIVATE
etPUBLIC
(les options publiques seront héritées par les cibles qui dépendent de la cible donnée).la source
add_compile_options(...)
si vous souhaitez l'appliquer à toutes les cibles.else()
ouendif()
.add_compile_options()
est que les avertissements se propageront aux cibles ajoutées viaadd_subdirectory()
. Si vous incluez des bibliothèques externes de cette façon, vous pouvez recevoir de nombreux avertissements si cette bibliothèque a été conçue avec un niveau d'avertissement différent.Certains modules CMake que j'ai écrits incluent la suppression expérimentale des avertissements cross-platfrom :
Résultat pour Xcode:
CLANG_WARN_SUSPICIOUS_IMPLICIT_CONVERSION
attribut Xcode (aka paramètres de construction -> avertissements -> conversions implicites suspectes -> OUI )-Werror
Makefile gcc et clang:
-Wconversion
,-Werror
Visual Studio:
/WX
,/w14244
Liens
la source
Voici la meilleure solution que j'ai trouvée jusqu'à présent (y compris une vérification du compilateur):
Cela définira le niveau d'avertissement 2 dans Visual Studio. Je suppose qu'avec un
-W2
cela fonctionnerait aussi dans GCC (non testé).Mise à jour de @Williams: ça devrait être
-Wall
pour GCC.la source
-Wall
et peut-être-Wextra
aussi détaillé sur gcc.gnu.org/onlinedocs/gcc/Warning-Options.html-W -Wall -Wextra -pedantic
.-Wextra
L'IIRC a été remplacé-W
dans une version ultérieure de GCC, mais je laisse les deux pour des raisons de compatibilité.Selon la documentation de Cmake 3.17.1 :
GCC et Clang partagent ces drapeaux, donc cela devrait couvrir les 3.
la source
add_compile_options
est à l'échelle du répertoire, alors quetarget_compile_options
c'est juste pour une seule cible.Si vous utilisez
target_compile_options
- cmake essaiera d 'utiliser un double/W*
drapeau, qui donnera un avertissement par le compilateur.la source
add_compile_options
seul pour obtenir des tonnes d'avertissements qui/W3
sont annulés/W4
. Le fait que CMake n'aborde pas cette option rudimentaire (définition du niveau d'avertissement) est incroyable.