c++11 clang c++14 llvm-clang c++17

c++11 - Obtenga la versión de Apple clang y la versión correspondiente de LLVM ascendente



llvm 3.7 0 (8)

Quiero saber qué versión de clang Apple instaló en mi macbook, para ver con c ++ 11 y / o c ++ 14 características disponibles. Escribí este comando:

clang --version //----response Apple LLVM version 7.0.0 (clang-700.1.76) Target: x86_64-apple-darwin15.0.0 Thread model: posix

Pero no puedo entender qué significa (clang-700.1.76) . ¿Cómo puedo convertir este código a una versión clang?

Este es el sitio donde puede verificar las características de c ++ disponibles en la versión de clang http://clang.llvm.org/cxx_status.html


Aquí está la mejor lista que he encontrado que correlaciona las versiones clang de Apple con las versiones LLVM:

trac.macports.org/wiki/XcodeVersionInfo

Las versiones anteriores solían decir a qué versión de LLVM correspondían, pero a partir de 7.0, Apple decidió no hacerlo más. Incluso definen la __clang_version__ y las macros de preprocesador relacionadas para indicar el número de versión de Apple, no la versión de LLVM. Entonces son inútiles para esto también.

Desafortunadamente, parece que la única forma de ver si tiene una función es probarla y verificar si funciona. por ejemplo, 7.0.2 todavía no tiene OpenMP habilitado por defecto (aunque es enable-able ), así que supongo que todavía es 3.6, no 3.7 todavía.


Como lo insinuó pkolbus , puede mirar /src/CMakeLists.txt para adivinar la versión correspondiente de Clang. Por ejemplo, Apple Clang 800.0.38 y 800.0.42.1 parecen estar basados ​​en Clang 3.9.0 de acuerdo con

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()


Echa un vistazo a 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]

Por ejemplo, Apple CLang 10.x está basado en LLVM 6.0.1.


El número de versión (Apple) del compilador es en su mayoría inútil, ya que también debe considerar si su código está compilado con libstdc++ o con libc++ (o cualquier otra biblioteca estándar), y qué versión de esos.

Si desea probar las características del idioma o la biblioteca, es mejor verificar otros valores definidos, por ejemplo, __cplusplus , __cpp_constexpr , __cpp_variadic_templates , etc. No es perfecto, pero parece funcionar mejor (si desea portabilidad) en mi experiencia y el soporte de todos los compiladores principales está mejorando.

Cada versión estándar de C ++ define un valor para __cplusplus , algunos compiladores usan valores intermedios para decir "ya comenzamos en C ++ 14, pero aún no estamos allí". Use >= para probar cuando sea necesario.

Las otras macros de prueba de características son similares, puede encontrar la versión actual en N4440 . Sin embargo, no todos los compiladores implementan N4440.



Si instaló clion, en sus cadenas de herramientas de preferencias , es posible que vea ''depurador'' como LLDB 7.0.1 incluido .

Creo que esta es la versión actual de Apple clang. (por ejemplo, Apple LLVM versión 10.0.1)


Si utiliza el comando de cadenas en el compilador, puede obtener la versión LLVM.

Por ejemplo, si tiene la versión clang que se identifica como Apple LLVM versión 7.0.2 (clang-700.1.81) , la salida de las cadenas tendrá este valor:

LLVM 3.7.0svn

Esto no parece funcionar con la versión Apple LLVM versión 7.3.0 (clang-703.0.29)


Uno puede intentar compilar algún archivo con la opción --verbose .

Por ejemplo: 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

Imprime la versión de svn de LLVM (3.7.0 en nuestro ejemplo)