Macbookにインストールされているclang Appleのバージョンを理解して、c ++ 11やc ++ 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バージョンで利用可能なc ++機能を確認できるサイトです http://clang.llvm.org/cxx_status.html
コンパイラの(Apple)バージョン番号はほとんど役に立ちません。コードがlibstdc++
またはlibc++
(またはその他の標準ライブラリ)のどちらでコンパイルされているかを考慮する必要があるためです。 。
言語またはライブラリの機能をテストする場合は、__cplusplus
、__cpp_constexpr
、__cpp_variadic_templates
など、他の定義済みの値を確認することをお勧めします。完全ではありませんが、私の経験で(移植性が必要な場合)より良く機能するため、すべての主要なコンパイラーのサポートが改善されています。
各C++標準バージョンは__cplusplus
の値を定義します。一部のコンパイラは、中間値を使用して「C++ 14で既に開始していますが、まだ存在していません」と言います。 >=
を使用して、必要なときにテストします。
他の機能テストマクロも同様です。現在のバージョンは N444 で確認できます。ただし、すべてのコンパイラがN4440を実装しているわけではありません。
AppleのclangのバージョンとLLVMのバージョンとを関連付けていることがわかりました。
https://trac.macports.org/wiki/XcodeVersionInfo
以前のバージョンでは、対応するLLVMのバージョンを示していましたが、7.0以降、Appleはそれを行わないことにしました。さらに、__clang_version__
および関連するプリプロセッサマクロを定義して、LLVMバージョンではなく、Appleバージョン番号を示します。だから、彼らはこれにも役に立たない。
残念ながら、機能があるかどうかを確認する唯一の方法は、それを試して、機能するかどうかを確認することです。例えば7.0.2では、まだOpenMPがデフォルトで有効になっていません( enable-able ですが)ので、3.7ではなく3.6のままです。
ウィキペディアのXcodeページには AppleのLLVMバージョンへのマップ (少なくともAppleClang 800.0.42.1まで)があります。 LLVM列には、オープンソースのLLVM/Clangバージョンがあります。これから、cppreferenceの言語機能を 言語機能のコンパイラサポートのチャート で検索できます。
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()
compile-verboseオプションを使用していくつかのファイルを試すことができます。
例:c ++ --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)を出力します
コンパイラで文字列コマンドを使用すると、LLVMバージョンが取得される場合があります。
たとえば、自身をApple LLVMバージョン7.0.2(clang-700.1.81)として識別するclangバージョンがある場合、文字列の出力には次の値が含まれます。
LLVM 3.7.0svn
これはバージョンでは機能しないようですApple LLVMバージョン7.3.0(clang-703.0.29)
https://en.wikipedia.org/wiki/Xcode#Toolchain_versions をご覧ください
------------------------------------------------------------------------------------ Xcode cctools[93] ld64[94] LLVM[85] Clang version string[95] 8.3.3 898 278.4 3.9.0svn[85] 8.1.0 (clang-802.0.42)[80] 9.0 900 302.3 4.0.0?[86] 9.0.0 (clang-900.0.37)[80] 9.1 900 302.3.1 4.0.0?[87] 9.0.0 (clang-900.0.38)[80] 9.2 900 305 4.0.0?[88] 9.0.0 (clang-900.0.39.2)[80] 9.3 906 351.8 5.0.2?[89] 9.1.0 (clang-902.0.39.1)[80] 9.3.1 906 351.8 5.0.2?[89] 9.1.0 (clang-902.0.39.1)[80] 9.4 906 351.8 5.0.2?[90] 9.1.0 (clang-902.0.39.2)[80] 9.4.1 906 351.8 5.0.2?[90] 9.1.0 (clang-902.0.39.2)[80] 10.0 921.0.1 409.12 6.0.1?[91] 10.0.0 (clang-1000.11.45.2)[80] 10.1 921.0.1 409.12 6.0.1?[92] 10.0.0 (clang-1000.11.45.5)[80]
たとえば、Apple CLang 10.xはLLVM 6.0.1ベースです。
Clionをpreference-toolchainsにインストールした場合、 'debugger'がbundled LLDB 7.0.1と表示される場合があります。
これは現在のApple clangバージョンだと思います。 (例:Apple LLVMバージョン10.0.1)