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