Actualmente estoy trabajando en el uso de cmake para construir algunos proyectos, siendo las principales plataformas Visual C++, MinGW GCC y Linux GCC. Al compilar con GCC, debo especificar la opción del compilador -Wno-invalid-offsetof
.¿Cómo aplicar diferentes opciones de compilación para diferentes compiladores en cmake?
Mi solución actual es la siguiente ...
if ( "${CMAKE_GENERATOR}" MATCHES "^Visual Studio"
OR "${CMAKE_GENERATOR}" MATCHES "^NMake"
)
set (CPPLIB_COMPILER_OPTS "")
else()
set (CPPLIB_COMPILER_OPTS "-Wno-invalid-offsetof")
endif()
...
set_target_properties(sh_core PROPERTIES COMPILE_FLAGS "${CPPLIB_COMPILER_OPTS}")
# repeated for all targets
Esto funciona, pero suponiendo que todos los generadores distintos de los estudios visuales construirán con gcc obviamente inseguro. Para empezar, hay generadores IIRC para compiladores de Borland. Más importante aún, usar make no siempre significa usar gcc.
Otros compiladores que probablemente usaré son llvm-gcc y clang. Afortunadamente, creo que incluso clang admite opciones compatibles con gcc. Pero esta lógica solo es válida mientras el código relevante nunca se publique.
Cmake parece verificar los compiladores disponibles y generar un archivo MAKE específicamente para ese compilador (planteando la pregunta: ¿por qué no tener al menos la opción de construir el proyecto directamente, sin la necesidad de un intermediario como marca?).
Siendo ese el caso, esperaba poder probar directamente gcc en mis archivos CMakeLists.txt. Hasta ahora, sin embargo, no puedo encontrar una variable apropiada para probar o cualquier otra solución obvia.
¿Esto es posible?
¡Eso es perfecto! Una cosa irrelevante, sin embargo ... no hay mucho más que verifique esa opción para C, ya que no existe tal compensación inválida en C, solo ocurre en C++. – Steve314
No lo sabía. De hecho, no sabía para qué era la opción, pero tiene mucho sentido, ya que C solo tiene tipos de POD http://gcc.gnu.org/onlinedocs/gcc-3.4.6/gcc/Warning-Options.html. Y CMake ignora la advertencia del compilador durante su prueba: "si compila funciona". – richq
¿Hay alguna manera de verificar combinaciones de opciones? También quería asegurarme de que no hubiera advertencias en tiempo de compilación, así que estaba buscando una forma de investigar las advertencias también. – thoni56