Check gcc minor in cmake
Is it possible to check the minor version number of GCC in cmake?
Я хочу сделать что-то вроде этого:
If (GCC_MAJOR >= 4 && GCC_MINOR >= 3)
4 ответа
Использование if(CMAKE_CXX_COMPILER_VERSION VERSION_GREATER 4.2)
как упомянуто онктамом. Этот устаревший ответ вернулся с 2.6 CMake дней.
Вы могли бы бежать 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()
Комбинируя 2 других ответа, вы можете проверить конкретную версию gcc следующим образом:
if (CMAKE_COMPILER_IS_GNUCC AND CMAKE_CXX_COMPILER_VERSION VERSION_GREATER 5.1)
...
endif()
Начиная с CMake 2.8.10 есть CMAKE_C_COMPILER_VERSION
а также CMAKE_CXX_COMPILER_VERSION
переменные именно для этой цели, так что вы можете сделать это:
if(CMAKE_CXX_COMPILER_VERSION VERSION_GREATER 4.2)
Тем не менее, есть аргумент, -dumpfullversion
это обеспечивает полную строку версии.
gcc -dumpfullversion
должен получить то, что вы хотите. В gcc 7 нарушена обратная совместимость.