tutorial smart remix programador online español curso cmake warning-level

smart - Cómo establecer el nivel de advertencia en CMake?



smart contracts ethereum (4)

Algunos de los módulos de CMake que he escrito incluyen la supresión experimental de advertencias entre plataformas :

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:

  • Establezca CLANG_WARN_SUSPICIOUS_IMPLICIT_CONVERSION atributo Xcode (también conocido como configuración de compilación -> advertencias -> conversiones implícitas sospechosas -> YES )
  • Agregar indicador del compilador: -Werror

Makefile gcc y clang:

  • Agregar indicadores del compilador: -Wconversion , -Werror

Estudio visual:

  • Agregar banderas del compilador: /WX , /w14244

Campo de golf

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

Encontré varias opciones pero la mayoría parecen no funcionar o no son consistentes con la documentación.


Aquí está la mejor solución que encontré hasta ahora (incluyendo un control de compilación):

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.


En CMake moderno, lo siguiente funciona bien:

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

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


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