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

Версия для 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

4b9b3361

Ответ 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 в нашем примере)