Версия для Apple clang
Я хочу понять, какая версия clang Apple установлена в моем macbook, чтобы увидеть с возможностями С++ 11 и/или С++ 14.
Я набрал эту команду:
clang --version
//----response
Apple LLVM version 7.0.0 (clang-700.1.76)
Target: x86_64-apple-darwin15.0.0
Thread model: posix
Но я не могу понять, что означает (clang-700.1.76)
.
Как я могу преобразовать этот код в версию clang?
Это сайт, на котором вы можете проверить функции С++, доступные в версии clang http://clang.llvm.org/cxx_status.html
Ответы
Ответ 1
Номер версии компилятора в основном бесполезен, так как вам также нужно учитывать, скомпилирован ли ваш код с помощью libstdc++
или с помощью libc++
(или любой другой стандартной библиотеки), и какой из них.
Если вы хотите протестировать языковые или библиотечные функции, лучше проверить другие определенные значения, например __cplusplus
, __cpp_constexpr
, __cpp_variadic_templates
и т.д. Это не идеально, но, похоже, работает лучше (если вы хотите переносить) в моем опыте, и поддержка со стороны всех основных компиляторов улучшается.
Каждая стандартная версия С++ определяет значение для __cplusplus
, некоторые компиляторы используют промежуточные значения, чтобы сказать, что "мы уже начали на С++ 14, но мы еще не были". Используйте >=
для проверки при необходимости.
Другие макросы тестовых тестов аналогичны, вы можете найти текущую версию N4440. Однако не все компиляторы реализуют N4440.
Ответ 2
Вот лучший список, который я нашел, который сопоставляет версии Apple clang с версиями LLVM:
https://trac.macports.org/wiki/XcodeVersionInfo
Предыдущие версии говорили о версии LLVM, с которой они соответствовали, но начиная с 7.0 Apple решила больше не делать этого. Они даже определяют макросы __clang_version__
и связанные с ним препроцессоры, чтобы указать номер версии Apple, а не версию LLVM. Поэтому они тоже бесполезны для этого.
К сожалению, это похоже на единственный способ увидеть, есть ли у вас функция попробовать его и проверить, работает ли он. например 7.0.2 по-прежнему не поддерживает OpenMP по умолчанию (хотя он enable-able), поэтому я думаю, что он все еще 3,6, а не 3,7.
Ответ 3
Как намечено pkolbus
, вы можете посмотреть /src/CMakeLists.txt
, чтобы угадать соответствующую версию Clang. Например, Apple Clang 800.0.38 и 800.0.42.1 оба, похоже, основаны на Clang 3.9.0 согласно
if(NOT DEFINED LLVM_VERSION_MAJOR)
set(LLVM_VERSION_MAJOR 3)
endif()
if(NOT DEFINED LLVM_VERSION_MINOR)
set(LLVM_VERSION_MINOR 9)
endif()
if(NOT DEFINED LLVM_VERSION_PATCH)
set(LLVM_VERSION_PATCH 0)
endif()
if(NOT DEFINED LLVM_VERSION_SUFFIX)
set(LLVM_VERSION_SUFFIX svn)
endif()
Ответ 4
Если вы используете команду strings в компиляторе, вы можете получить версию LLVM.
Например, если у вас есть версия clang, которая идентифицирует себя как Apple LLVM версии 7.0.2 (clang-700.1.81), вывод строк будет иметь следующее значение:
LLVM 3.7.0svn
Это не работает с версией Apple LLVM версии 7.3.0 (clang-703.0.29)
Ответ 5
Можно попытаться скомпилировать некоторый файл с опцией --verbose.
Например:
С++ --verbose -c test1.cpp
Apple LLVM version 7.0.2 (clang-700.1.81)
Target: x86_64-apple-darwin14.5.0
Thread model: posix
"/Library/Developer/CommandLineTools/usr/bin/clang" -cc1 -triple x86_64-apple-macosx10.10.0 -Wdeprecated-objc-isa-usage -Werror=deprecated-objc-isa-usage -emit-obj -mrelax-all -disable-free -disable-llvm-verifier -main-file-name test1.cpp -mrelocation-model pic -pic-level 2 -mthread-model posix -mdisable-fp-elim -masm-verbose -munwind-tables -target-cpu core2 -target-linker-version 253.9 -v -dwarf-column-info -coverage-file /Users/az/ctest/test1.cpp -resource-dir /Library/Developer/CommandLineTools/usr/bin/../lib/clang/7.0.2 -stdlib=libc++ -fdeprecated-macro -fdebug-compilation-dir /Users/az/ctest -ferror-limit 19 -fmessage-length 130 -stack-protector 1 -mstackrealign -fblocks -fobjc-runtime=macosx-10.10.0 -fencode-extended-block-signature -fcxx-exceptions -fexceptions -fmax-type-align=16 -fdiagnostics-show-option -fcolor-diagnostics -o test1.o -x c++ test1.cpp
clang -cc1 version 7.0.2 based upon LLVM 3.7.0svn default target x86_64-apple-darwin14.5.0
Он печатает версию LLVM svn (3.7.0 в нашем примере)
Ответ 6
Страница Википедии Xcode имеет карту Apple для версий LLVM (вплоть до, по крайней мере, AppleClang 800.0.42.1). Столбец LLVM имеет версию LLVM/Clang с открытым исходным кодом. Из этого вы можете найти язык в cppreference график поддержки компилятора для языковых функций.