Проверьте GCC minor в cmake
можно ли проверить номер младшей версии GCC в cmake?
Я хочу сделать что-то вроде этого:
If (GCC_MAJOR >= 4 && GCC_MINOR >= 3)
4 ответов
использовать if(CMAKE_CXX_COMPILER_VERSION VERSION_GREATER 4.2)
Как упоминалось onqtam. Этот устаревший ответ вернулся из дней 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 " для версии 4.3.1 gcc. Однако вы можете использовать синтаксис проверки версий 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()
С CMake 2.8.10 есть CMAKE_C_COMPILER_VERSION
и CMAKE_CXX_COMPILER_VERSION
переменные именно для этой цели, так что вы можете сделать это:
if(CMAKE_CXX_COMPILER_VERSION VERSION_GREATER 4.2)
комбинируя 2 других ответа, вы можете проверить конкретную версию gcc следующим образом:
if (CMAKE_COMPILER_IS_GNUCC AND CMAKE_CXX_COMPILER_VERSION VERSION_GREATER 5.1)
...
endif()
однако, есть аргумент, -dumpfullversion
, который предоставляет строку полной версии.
gcc -dumpfullversion
должен получить то, что вы хотите. Все еще обратная совместимость нарушена в gcc 7.