developer tip

Apple clang 버전 및 해당 업스트림 LLVM 버전 가져 오기

copycodes 2020. 12. 9. 08:23
반응형

Apple clang 버전 및 해당 업스트림 LLVM 버전 가져 오기


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 버전 http://clang.llvm.org/cxx_status.html 에서 사용 가능한 C ++ 기능을 확인할 수있는 사이트입니다 .


컴파일러의 (Apple) 버전 번호는 대부분 쓸모가 없습니다. 코드가 컴파일되었는지 (또는 다른 표준 라이브러리) libstdc++와 함께 컴파일되는지 여부 libc++와 그 버전이 무엇 인지 고려해야하기 때문 입니다.

당신이 언어 나 라이브러리 기능을 테스트하려는 경우, 다른 정의 된 값을 확인하는 것이 좋습니다 예를 들어, __cplusplus, __cpp_constexpr, __cpp_variadic_templates, 등이 완벽하지 않습니다 만, (당신이 휴대 성을 원하는 경우) 내 경험과 지원에 더 나은 작동하는 것 같다 모든 주요 컴파일러에서 개선되고 있습니다.

각 C ++ 표준 버전은에 대한 값을 정의하고 __cplusplus일부 컴파일러는 중간 값을 사용하여 "이미 C ++ 14에서 시작했지만 아직 거기에 있지 않습니다"라고 말합니다. >=필요할 때 테스트하는 데 사용 합니다.

다른 기능 테스트 매크로는 유사하며 N4440 에서 현재 버전을 찾을 수 있습니다 . 그러나 모든 컴파일러가 N4440을 구현하는 것은 아닙니다.


다음은 Apple의 clang 버전을 LLVM 버전과 연관시키는 가장 좋은 목록입니다.

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

이전 버전은 해당하는 LLVM 버전을 말했지만 7.0부터 Apple은 더 이상 그렇게하지 않기로 결정했습니다. 또한 __clang_version__LLVM 버전이 아닌 Apple 버전 번호를 나타 내기 위해 및 관련 전 처리기 매크로를 정의합니다 . 그래서 그들은 이것에도 쓸모가 없습니다.

안타깝게도 기능이 있는지 확인하는 유일한 방법은 기능을 사용해보고 작동하는지 확인하는 것입니다. (그것은 비록 예를 들어 7.0.2은 여전히 OpenMP를 기본적으로 사용할 수없는 수 - 수 ) 나는 아직 여전히 3.6이 아닌 3.7 것 같아요, 그래서.


Wikipedia의 Xcode 페이지에는 LLVM 버전에 대한 Apple의지도가 있습니다 (최소 AppleClang 800.0.42.1까지). LLVM 열에는 오픈 소스 LLVM / Clang 버전이 있습니다. 여기에서 cppreference의 언어 기능에 대한 컴파일러 지원 차트 에서 언어 기능을 찾을 수 있습니다 .


에서 알 pkolbus/src/CMakeLists.txt있듯이에서 해당 Clang 버전을 추측 할 수 있습니다 . 예를 들어 Apple Clang 800.0.38800.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()

--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)을 인쇄합니다.


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 기반입니다.


컴파일러에서 strings 명령을 사용하면 LLVM 버전을 얻을 수 있습니다.

예를 들어 자신을 Apple LLVM 버전 7.0.2 (clang-700.1.81) 로 식별하는 clang 버전이있는 경우 문자열 출력은 다음 값을 갖습니다.

LLVM 3.7.0svn

이것은 버전 Apple LLVM 버전 7.3.0 (clang-703.0.29) 에서 작동하지 않는 것 같습니다.


clion을 설치 한 경우 preferences-toolchains 에서 번들 LLDB 7.0.1 로 'debugger'를 볼 수 있습니다 .

나는 이것이 현재 Apple clang 버전이라고 생각합니다. (예 : Apple LLVM 버전 10.0.1)

참고URL : https://stackoverflow.com/questions/33603027/get-apple-clang-version-and-corresponding-upstream-llvm-version

반응형