Я хочу создать проект в С++ 11, и я использую CMake как мою систему сборки.
Как добавить минимальную версию компилятора в файлы конфигурации CMake?
Я хочу создать проект в С++ 11, и я использую CMake как мою систему сборки.
Как добавить минимальную версию компилятора в файлы конфигурации CMake?
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, и у вас есть дополнительное преимущество, которое вам не нужно открывать для всех компиляторов в минимальной версии.
Начиная с 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()
Вы можете проверить конкретную версию 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()