it-swarm.dev

¿Cómo configurar el nivel de advertencia en CMake?

¿Cómo configurar el nivel de advertencia para un proyecto (no toda la solución) utilizando CMake? Debería funcionar en Visual Studio yGCC.

Encontré varias opciones, pero la mayoría parece que no funcionan o no son consistentes con la documentación.

90
Wernight

Aquí está la mejor solución que encontré hasta ahora (incluida una verificación del compilador):

if(CMAKE_BUILD_TOOL MATCHES "(msdev|devenv|nmake)")
    add_definitions(/W2)
endif()

Esto establecerá el nivel de advertencia 2 en Visual Studio. Supongo que con un -W2 también funcionaría en GCC (no probado).

Actualización de @Williams: debería ser -Wall para GCC.

7
Wernight

ACTUALIZACIÓN: Esta respuesta es anterior a la era moderna de CMake. Todos los usuarios sanos de CMake deben abstenerse de jugar con CMAKE_CXX_FLAGS directamente y llamar al comando target_compile_options en su lugar. Verifique la respuesta de mrts que presenta la mejor práctica recomendada.

Puedes hacer algo similar a esto:

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()
82
mloskot

En el moderno CMake, funciona bien lo siguiente:

if(MSVC)
  target_compile_options(${TARGET_NAME} PRIVATE /W4 /WX)
else()
  target_compile_options(${TARGET_NAME} PRIVATE -Wall -Wextra -pedantic -Werror)
endif()

Reemplace ${TARGET_NAME} con el nombre de destino real. -Werror es opcional, convierte todas las advertencias en errores.

35
mrts

Algunos módulos CMake que he escrito incluyen experimental supresión de advertencia multiplataforma :

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}"
)

Resultado para Xcode:

  • Establecer CLANG_WARN_SUSPICIOUS_IMPLICIT_CONVERSION atributo de Xcode (aka construir configuraciones -> advertencias -> conversiones implícitas sospechosas ->)
  • Añadir marca de compilador: -Werror

Makefile gcc y clang:

  • Agregue indicadores de compilador: -Wconversion, -Werror

Estudio visual:

  • Agregue indicadores de compilador: /WX, /w14244

Campo de golf

23
user2288008