¿Cómo establecer el nivel de advertencia para un proyecto (no la solución completa) usando CMake ? Debería funcionar en Visual Studio y GCC .
Encontré varias opciones, pero la mayoría parece no funcionar o no son consistentes con la documentación.
cmake
warning-level
Wernight
fuente
fuente

/Wallindicador (que se denominaEnableAllWarnings). Produce incluso más advertencias que/W4. Sin embargo, desde mi experiencia, produce demasiadas advertencias./Wallse puede utilizar si desea seguir una estrategia 'sustractiva' para las advertencias, como la de clang-Weverything. En lugar de seleccionar advertencias para habilitar, habilita todo y luego selecciona advertencias específicas para deshabilitar.En CMake moderno, lo siguiente funciona bien:
Mi colega sugirió una versión alternativa:
Reemplazar
${TARGET_NAME}con el nombre real del objetivo.-Werrores opcional, convierte todas las advertencias en errores.O utilícelo
add_compile_options(...)si desea aplicarlo a todos los objetivos como lo sugiere @aldo en los comentarios.Además, asegúrese de comprender la diferencia entre
PRIVATEyPUBLIC(las opciones públicas serán heredadas por los destinos que dependen del destino dado).fuente
add_compile_options(...)si desea aplicarlo a todos los objetivos.else()oendif().add_compile_options()es que las advertencias se propagarán a los objetivos agregados a través deadd_subdirectory(). Si incluye bibliotecas externas de esta manera, puede recibir muchas advertencias si esa biblioteca fue diseñada con un nivel de advertencia diferente.Algunos módulos de CMake que he escrito incluyen la supresión de advertencias experimentales entre plataformas :
Resultado para Xcode:
CLANG_WARN_SUSPICIOUS_IMPLICIT_CONVERSIONatributo Xcode (también conocido como configuración de compilación -> advertencias -> conversiones implícitas sospechosas -> SÍ )-WerrorMakefile gcc y clang:
-Wconversion,-WerrorEstudio visual:
/WX,/w14244Enlaces
fuente
Aquí está la mejor solución que encontré hasta ahora (incluida una verificación del compilador):
Esto establecerá el nivel de advertencia 2 en Visual Studio. Supongo que con un
-W2también funcionaría en GCC (no probado).Actualización de @Williams: debería ser
-Wallpara GCC.fuente
-Wally tal vez-Wextracomo se detalla en gcc.gnu.org/onlinedocs/gcc/Warning-Options.html-W -Wall -Wextra -pedantic.-WextraIIRC reemplazado-Wen una versión posterior de GCC, pero dejo ambos por el bien de las compatibilidades.Según la documentación de Cmake 3.17.1 :
GCC y Clang comparten estos indicadores, por lo que debería cubrir los 3.
fuente
add_compile_optionses para todo el directorio, mientras quetarget_compile_optionses solo para un único destino.Si usa
target_compile_options- cmake intentará usar doble/W*bandera, lo que dará una advertencia por parte del compilador.fuente
add_compile_optionsúnico para recibir toneladas de advertencias que/W3están siendo anuladas/W4. El hecho de que CMake no esté abordando esta opción rudimentaria (establecer el nivel de advertencia) es increíble.