172 votes

Comment définir le niveau d'avertissement dans CMake?

Comment définir le niveau d'avertissement pour un projet (pas la solution entière) en utilisant CMake ? Devrait fonctionner sur Visual Studio et GCC .

J'ai trouvé diverses options, mais la plupart ne semblent pas fonctionner ou ne correspondent pas à la documentation.

108voto

mloskot Points 13971

Vous pouvez faire quelque chose de semblable à 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()
 

28voto

ruslo Points 2042

Quelques expériences avec la croix-platfrom avertissement suppression:

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 de Xcode:

  • Ensemble CLANG_WARN_SUSPICIOUS_IMPLICIT_CONVERSION Xcode attribut (aka construire paramètres -> avertissements -> suspect conversions implicites -> OUI)
  • Ajouter compilateur indicateur: -Werror

Makefile gcc et clang:

  • Ajouter les drapeaux de compilation: -Wconversion, -Werror

Visual studio:

  • Ajouter les drapeaux de compilation: /WX, /w14244

Liens

9voto

Wernight Points 6086

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: Il devrait s'agir de -Wall pour GCC.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X