Comment définir le niveau d'avertissement pour un projet (pas la solution complète) en utilisant CMake? Devrait fonctionner sur Visual Studio et [~ # ~] gcc [~ # ~] .
J'ai trouvé différentes options mais la plupart semblent ne pas fonctionner ou ne sont pas conformes à la documentation.
Voici la meilleure solution que j'ai trouvée jusqu'à présent (y compris une vérification du compilateur):
if(CMAKE_BUILD_TOOL MATCHES "(msdev|devenv|nmake)")
add_definitions(/W2)
endif()
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: Cela devrait être -Wall
pour GCC.
MISE À JOUR: Cette réponse est antérieure à l'ère Modern CMake. Tout utilisateur sain de CMake devrait s'abstenir de jouer avec CMAKE_CXX_FLAGS
directement et appelez le target_compile_options
commande à la place. Vérifiez la réponse de mrts qui présente la meilleure pratique recommandée.
Vous pouvez faire quelque chose de similaire à ceci:
if(MSVC)
# Force to always compile with W4
if(CMAKE_CXX_FLAGS MATCHES "/W[0-4]")
string(REGEX REPLACE "/W[0-4]" "/W4" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
else()
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /W4")
endif()
elseif(CMAKE_COMPILER_IS_GNUCC OR CMAKE_COMPILER_IS_GNUCXX)
# Update if necessary
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wno-long-long -pedantic")
endif()
Dans CMake moderne, ce qui suit fonctionne bien:
if(MSVC)
target_compile_options(${TARGET_NAME} PRIVATE /W4 /WX)
else()
target_compile_options(${TARGET_NAME} PRIVATE -Wall -Wextra -pedantic -Werror)
endif()
Remplacez ${TARGET_NAME}
Par le nom cible réel. -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.
Certains modules CMake que j'ai écrits incluent expérimental suppression d'avertissement cross-platfrom :
sugar_generate_warning_flags(
target_compile_options
target_properties
ENABLE conversion
TREAT_AS_ERRORS ALL
)
set_target_properties(
foo
PROPERTIES
${target_properties}
COMPILE_OPTIONS
"${target_compile_options}"
)
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