Подтвердить что ты не робот

Как добавить минимальную требуемую версию компилятора?

Я хочу создать проект в С++ 11, и я использую CMake как мою систему сборки.

Как добавить минимальную версию компилятора в файлы конфигурации CMake?

4b9b3361

Ответ 1

AFAIK, нет встроенной поддержки для чего-то подобного, но вы, безусловно, могли бы написать ее сами:

if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
  if(CMAKE_CXX_COMPILER_VERSION VERSION_LESS "your.required.gcc.version")
    message(FATAL_ERROR "Insufficient gcc version")
  endif()
elseif(CMAKE_CXX_COMPILER_ID STREQUAL "MSVC")
  if(CMAKE_CXX_COMPILER_VERSION VERSION_LESS "your.required.msvc.version")
    message(FATAL_ERROR "Insufficient msvc version")
  endif()
elseif(...)
# etc.
endif()

Тем не менее, я предлагаю вам фактически рассмотреть подход обнаружения объектов. То есть, используйте try_compile(), чтобы убедиться, что компилятор поддерживает нужные вам функции, и FATAL_ERROR, если это не так. Это более идиоматично в CMake, и у вас есть дополнительное преимущество, которое вам не нужно открывать для всех компиляторов в минимальной версии.

Ответ 2

Начиная с CMake 2.8.10 переменные CMAKE_ <LANG> _COMPILER_VERSION могут быть доступны пользователям для получения версии компилятора. В предыдущих версиях они были зарезервированы только для внутренних целей и не должны считываться кодом пользователя. Они также не гарантируются для всех языков, но C и CXX обязательно должны быть доступны.

CMake также содержит операторы для сравнения версий (VERSION_LESS, VERSION_EQUAL, VERSION_GREATER), которые вы можете использовать для написания кода проверки версии.

Помните, что вам нужно будет выяснить, какой у вас есть первый компилятор, а затем проверить правильную версию.

Вот краткий образец из одного из моих проектов:

if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU")
    # require at least gcc 4.8
    if (CMAKE_CXX_COMPILER_VERSION VERSION_LESS 4.8)
        message(FATAL_ERROR "GCC version must be at least 4.8!")
    endif()
elseif ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang")
    # require at least clang 3.2
    if (CMAKE_CXX_COMPILER_VERSION VERSION_LESS 3.2)
        message(FATAL_ERROR "Clang version must be at least 3.2!")
    endif()
else()
    message(WARNING "You are using an unsupported compiler! Compilation has only been tested with Clang and GCC.")
endif()

Ответ 3

Вы можете проверить конкретную версию gcc следующим образом:

if (CMAKE_COMPILER_IS_GNUCC AND CMAKE_CXX_COMPILER_VERSION VERSION_LESS 5.1)
    message(FATAL_ERROR "Require at least gcc-5.1")
endif()