Obtenga la versión de Apple clang y la versión de LLVM correspondiente


Quiero entender qué versión de clang Apple instalado en mi macbook, para ver con c++11 y/o c++14 características están 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 soy capaz de entender lo que (clang-700.1.76) significa. ¿Cómo puedo convertir este código a una versión clang?

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

Author: smci, 2015-11-09

6 answers

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 ellos.

Si desea probar las características del lenguaje o de la biblioteca, es mejor verificar otros valores definidos, p. ej., __cplusplus, __cpp_constexpr, __cpp_variadic_templates, etc. No es perfecto, pero parece funcionar mejor (si quieres portabilidad) en mi experiencia y el soporte de todos los compiladores principales es mejorar.

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 hemos llegado a eso". Utilice >= para realizar pruebas 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.

 1
Author: Daniel Frey,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-03-06 23:03:26

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

Https://trac.macports.org/wiki/XcodeVersionInfo

Las versiones anteriores solían decir a qué versión de LLVM correspondían, pero a partir de la 7.0, Apple decidió dejar de hacer eso. Incluso definen el __clang_version__ y macros preprocesadores relacionados para indicar el número de versión de Apple, no la versión LLVM. Así que son inútiles para esto también.

Desafortunadamente, parece que la única manera de ver si tiene una característica es probarlo y comprobar 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.

 15
Author: Mike Jarvis,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-03-15 00:29:59

Como insinúa pkolbus, puedes mirar el /src/CMakeLists.txt para adivinar la versión correspondiente de Clang. Por ejemplo, Apple Clang 800.0.38 y 800.0.42.1 ambos parecen basado en Clang 3.9.0 según

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()
 8
Author: Franklin Yu,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-01-04 20:02:45

La página Xcode de Wikipedia tiene un mapa de las versiones de Apple a LLVM (hasta al menos AppleClang 800.0.42.1). La columna LLVM tiene la versión de código abierto LLVM / Clang. A partir de esto, puede buscar una característica de lenguaje en la tabla de cppreference de compatibilidad del compilador para las características de lenguaje.

 6
Author: John McFarlane,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-09-16 23:12:43

Se puede intentar compilar algún fichero con la opción verb verbose.

Por ejemplo: c++ verb 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 svn de LLVM (3.7.0 en nuestro ejemplo)

 2
Author: user8308676,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-07-14 15:10:51

Si usa el comando strings en el compilador, puede obtener la versión LLVM.

Por ejemplo, si tiene la versión de clang que se identifica como Apple LLVM versión 7.0.2 (clang-700.1.81) , la salida de 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)

 1
Author: user2956983,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-03-30 13:59:05