Clang 版本混淆(OSX 和 Cmake)

Clang version confusion (OSX and Cmake)

本文关键字:Cmake OSX 版本 Clang      更新时间:2023-10-16

我正在尝试锁定我使用的编译器版本(出于多种原因,我不会深入)。为此,我想使用 CMAKE_CXX_COMPILER_VERSIONCMAKE_CXX_COMPILER_VERSION 检查构建时的编译器版本。

在OSX CMake报告上:

CMAKE_CXX_COMPILER_VERSION  7.0.2.7000181
CMAKE_CXX_COMPILER_ID       Clang
CMAKE_CXX_COMPILER          /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/c++

但是,通过终端报告的版本是:

Apple LLVM version 7.3.0 (clang-703.0.31)
Target: x86_64-apple-darwin15.5.0
Thread model: posix
InstalledDir: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin

这是正确的:

/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/c++ --version
clang --version
gcc --version
g++ --version

为什么 CMake 和命令行(针对同一可执行文件)报告的版本号存在差异?为了限制特定的编译器版本,CMAKE_CXX_COMPILER_VERSION可靠吗?

原来 CMake 在 CMakeFiles/3.5.0/CmakeCXXCompiler.cmake 中设置编译器版本(对于版本 3.5.0)。只有删除此文件并重新生成,才会报告正确的编译器版本(假设您在某个时候安装了不同的编译器版本)。