¿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
/Wall
indicador (que se denominaEnableAllWarnings
). Produce incluso más advertencias que/W4
. Sin embargo, desde mi experiencia, produce demasiadas advertencias./Wall
se 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.-Werror
es 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
PRIVATE
yPUBLIC
(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_CONVERSION
atributo Xcode (también conocido como configuración de compilación -> advertencias -> conversiones implícitas sospechosas -> SÍ )-Werror
Makefile gcc y clang:
-Wconversion
,-Werror
Estudio visual:
/WX
,/w14244
Enlaces
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
-W2
también funcionaría en GCC (no probado).Actualización de @Williams: debería ser
-Wall
para GCC.fuente
-Wall
y tal vez-Wextra
como se detalla en gcc.gnu.org/onlinedocs/gcc/Warning-Options.html-W -Wall -Wextra -pedantic
.-Wextra
IIRC reemplazado-W
en 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_options
es para todo el directorio, mientras quetarget_compile_options
es 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/W3
están siendo anuladas/W4
. El hecho de que CMake no esté abordando esta opción rudimentaria (establecer el nivel de advertencia) es increíble.