2010-10-30 10 views
24

¿Es posible verificar el número de versión menor de GCC en cmake?Comprobar gcc minor en cmake

quiero hacer algo como esto:

If (GCC_MAJOR >= 4 && GCC_MINOR >= 3) 
+0

posible duplicado de [¿Cómo puedo añadir una versión del compilador requisito mínimo?] (Http://stackoverflow.com/questions/14933172/how-can-i-add-a-minimum-compiler-version-requisite) – sleske

+0

Si estoy adivinando sus intenciones correctamente, esto detectará incorrectamente GCC 5.0, 5.1, 6.0, 6.1, etc. – jww

Respuesta

31

Uso if(CMAKE_CXX_COMPILER_VERSION VERSION_GREATER 4.2) Según lo mencionado por onqtam. Esta respuesta obsoleta había vuelto de los 2.6 días hábiles.

Puede ejecutar gcc -dumpversion y analizar la salida. Aquí hay una manera de hacerlo:

if (CMAKE_COMPILER_IS_GNUCC) 
    execute_process(COMMAND ${CMAKE_C_COMPILER} -dumpversion 
        OUTPUT_VARIABLE GCC_VERSION) 
    string(REGEX MATCHALL "[0-9]+" GCC_VERSION_COMPONENTS ${GCC_VERSION}) 
    list(GET GCC_VERSION_COMPONENTS 0 GCC_MAJOR) 
    list(GET GCC_VERSION_COMPONENTS 1 GCC_MINOR) 

    message(STATUS ${GCC_MAJOR}) 
    message(STATUS ${GCC_MINOR}) 
endif() 

Eso imprimiría "4" y "3" para la versión 4.3.1 de gcc. Sin embargo se puede utilizar la versión de CMake comprobación de sintaxis para hacer la vida un poco más fácil y pasa el material de expresiones regulares:

execute_process(COMMAND ${CMAKE_C_COMPILER} -dumpversion 
       OUTPUT_VARIABLE GCC_VERSION) 
if (GCC_VERSION VERSION_GREATER 4.3 OR GCC_VERSION VERSION_EQUAL 4.3) 
     message(STATUS "Version >= 4.3") 
endif() 

+0

Lo encontré realmente útil, gracias. ¿Hay alguna forma de quitar la nueva línea del número de versión? – Patryk

+0

A partir de gcc 7, '-dumpversion' ahora genera simplemente' 7', por lo que está roto. Prefiere la respuesta de onqtam, que es mucho más portátil. –

+0

2.8.10 tiene ahora la variable, pero es posible que desee saber que gcc tiene -dumpfullversion – sherpya

17

Desde CMake 2.8.10 no son las variables CMAKE_C_COMPILER_VERSION y CMAKE_CXX_COMPILER_VERSION exactamente para este propósito por lo que puede hacer esto:

if(CMAKE_CXX_COMPILER_VERSION VERSION_GREATER 4.2) 
+1

Esta debería ser la respuesta aceptada: más corta, más simple, mejor definida para todas las versiones actuales y futuras del compilador. La respuesta aceptada en este momento (por richq) tiene un problema: '-dumpversion' ahora devuelve' 7' en gcc 7, por lo que es una solución rota. –

9

la combinación de los otros 2 respuestas, se puede comprobar la versión de gcc específica de la siguiente manera:

if (CMAKE_COMPILER_IS_GNUCC AND CMAKE_CXX_COMPILER_VERSION VERSION_GREATER 5.1) 
    ... 
endif()