Search code examples
gccbuildcmakecross-platformversion-detection

Check gcc minor in cmake


Is it possible to check the minor version number of GCC in cmake?

I want to do something like this:

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

Solution

  • Use if(CMAKE_CXX_COMPILER_VERSION VERSION_GREATER 4.2) as mentioned by onqtam. This obsolete answer was back from the 2.6 CMake days.

    You could run gcc -dumpversion and parse the output. Here is one way to do that:

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

    That would print "4" and "3" for gcc version 4.3.1. However you can use CMake's version checking syntax to make life a bit easier and skip the regex stuff:

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