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.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()
--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)
'developer tip' 카테고리의 다른 글
JS가있는 웹 사이트는 개발자 도구가 활성화 될 때까지 IE9에서 작동하지 않습니다. (0) | 2020.12.09 |
---|---|
복잡한 데이터 구조 Redis (0) | 2020.12.09 |
jQuery 플러그인 템플릿-모범 사례, 규칙, 성능 및 메모리 영향 (0) | 2020.12.09 |
애플리케이션 백그라운드에서 동영상을 녹화하는 방법 : Android (0) | 2020.12.09 |
C ++ 11 람다에서 참조로 참조 캡처 (0) | 2020.12.09 |