2010-10-30 23 views
24

cmake'deki küçük versiyon numarasını kontrol etmek mümkün mü?cmake'de gcc minörünü kontrol edin

Böyle bir şey yapmak istiyorum:

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

olası bir kopyası [Bir asgari derleyici sürüm eki nasıl ekleyebilirim?] (Http://stackoverflow.com/questions/14933172/how-can-i-add-a-minimum-compiler-version-requisite) – sleske

+0

Eğer niyetlerinizi doğru tahmin ediyorsam, bu GCC 5.0, 5.1, 6.0, 6.1, vs'yi yanlış algılayacaktır. – jww

cevap

31

Kullanım if(CMAKE_CXX_COMPILER_VERSION VERSION_GREATER 4.2) onqtam tarafından belirtildiği gibi. Bu eski cevap 2.6 CMake gününden geri döndü.

gcc -dumpversion'u çalıştırabilir ve çıktıyı ayrıştırabilirsiniz. Bunu yapmanın bir yolu:

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

Gcc sürüm 4.3.1 için "4" ve "3" basar. Eğer biraz daha kolay bir hayat kurmak için sözdizimi denetimi CKağıt sürümünü kullanmak ve düzenli ifade şeyler atlayabilirsiniz Ancak:

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

Gerçekten faydalı olduğunu keşfettim, teşekkürler. Yeni hattı sürüm numarasından çıkarmanın bir yolu var mı? – Patryk

+0

gcc 7'den itibaren, '-dumpversion' artık '7' çıktılar, bu yüzden bozuk. Cevap, daha taşınabilir olan onqtam tarafından tercih edilir. –

+0

2.8.10 şimdi değişkene sahiptir, ancak gcc'nin -dumpfullversion'un – sherpya

17

CMake 2.8.10 yana CMAKE_C_COMPILER_VERSION ve CMAKE_CXX_COMPILER_VERSION değişkenler size böylece bu amaç için tam olarak vardır bunu yapabilirsiniz: aşağıdaki gibi 2 diğer cevaplar birleştiren

if(CMAKE_CXX_COMPILER_VERSION VERSION_GREATER 4.2) 
+1

olduğunu bilmenizi isteriz. Bu kabul edilen cevap olmalıdır: tüm mevcut ve gelecekteki derleyici sürümleri için daha kısa, daha basit, iyi tanımlanmış. Şu anda (richq tarafından) kabul edilen bir sorunun bir sorunu var: '-dumpversion' artık gcc 7'de 7'yi döndürüyor, bu yüzden kırık bir çözüm. –

9

, belirli gcc sürümünü kontrol edebilirsiniz:

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