2010-10-30 13 views
24

È possibile controllare il numero di versione minore di GCC in cmake?Controllare gcc minor in cmake

voglio fare qualcosa di simile:

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

possibile duplicato di [Come posso aggiungere un requisito minimo per la versione del compilatore?] (Http://stackoverflow.com/questions/14933172/how-can-i-add-a-minimum-compiler-version-requisite) – sleske

+0

Se indovino le vostre intenzioni correttamente, questo rivelerà erroneamente GCC 5.0, 5.1, 6.0, 6.1, ecc. – jww

risposta

31

Usa if(CMAKE_CXX_COMPILER_VERSION VERSION_GREATER 4.2) come detto da onqtam. Questa risposta obsoleta era tornata dai giorni di CMake 2.6.

È possibile eseguire gcc -dumpversion e analizzare l'output. Ecco un modo per farlo:

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

Che sarebbe stampare "4" e "3" per gcc version 4.3.1. Tuttavia è possibile utilizzare la versione di CMake il controllo della sintassi per rendere la vita un po 'più facile e saltare la roba regex:

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

L'ho trovato davvero utile, grazie. C'è un modo per rimuovere la nuova riga dal numero di versione? – Patryk

+0

A partire da gcc 7, '-dumpversion' ora emette semplicemente' 7', quindi è rotto. Preferisco la risposta di onqtam che è molto più portabile. –

+0

2.8.10 ha ora la variabile, ma potreste voler sapere che gcc ha -dumpfullversion – sherpya

17

Dal CMake 2.8.10 ci sono le variabili CMAKE_C_COMPILER_VERSION e CMAKE_CXX_COMPILER_VERSION esattamente per questo scopo in modo da può fare questo:

if(CMAKE_CXX_COMPILER_VERSION VERSION_GREATER 4.2) 
+1

Questa dovrebbe essere la risposta accettata: più breve, più semplice, ben definita per tutte le versioni del compilatore attuali e future. La risposta accettata adesso (da richq) ha un problema: '-dumpversion' ora restituisce' 7' in gcc 7, quindi è una soluzione non funzionante. –

9

Combinando gli altri 2 risposte, è possibile controllare la versione specifica di gcc come segue:

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