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.
La página Xcode de Wikipedia tiene un mapa de Apple a las versiones 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 función de idioma en la tabla de compatibilidad de compiladores de cppreference para funciones de idioma .
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)