Проверьте gcc minor в cmake - PullRequest
       53

Проверьте gcc minor в cmake

27 голосов
/ 30 октября 2010

Можно ли проверить младший номер версии GCC в cmake?

Я хочу сделать что-то вроде этого:

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

Ответы [ 4 ]

35 голосов
/ 01 ноября 2010

Используйте if(CMAKE_CXX_COMPILER_VERSION VERSION_GREATER 4.2), как указано в onqtam.Этот устаревший ответ вернулся с 2,6 CMake days.

Вы можете запустить gcc -dumpversion и проанализировать вывод.Вот один из способов сделать это:

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

Это выведет «4» и «3» для gcc версии 4.3.1.Однако вы можете использовать синтаксис проверки версии CMake, чтобы немного упростить жизнь, и пропустить регулярные выражения:

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

18 голосов
/ 25 февраля 2016

Начиная с CMake 2.8.10, есть переменные CMAKE_C_COMPILER_VERSION и CMAKE_CXX_COMPILER_VERSION именно для этой цели, поэтому вы можете сделать это:

if(CMAKE_CXX_COMPILER_VERSION VERSION_GREATER 4.2)
12 голосов
/ 24 августа 2016

Комбинируя 2 других ответа, вы можете проверить конкретную версию gcc следующим образом:

if (CMAKE_COMPILER_IS_GNUCC AND CMAKE_CXX_COMPILER_VERSION VERSION_GREATER 5.1)
    ...
endif()
0 голосов
/ 07 мая 2018

Однако есть аргумент, -dumpfullversion, который предоставляет строку полной версии.

gcc -dumpfullversion

должен получить то, что вы хотите. Тем не менее в gcc 7 нарушена обратная совместимость.

...