- 编译项目时出现了:Compiler ‘MSVC’ is not supported 的CMake Error
- 某些项目可能不支持 MSVC,或专为 GCC、Clang 等编译器设计(比如项目中用到了
__attribute__
,且并非所有的编译器都支持 bfloat16 类型__bf16
)
- 报错的CMAKE语句如下:
#
# Copyright Soramitsu Co., 2021-2023
# Copyright Quadrivium Co., 2023
# All Rights Reserved
# SPDX-License-Identifier: Apache-2.0
#
if (CMAKE_CXX_COMPILER_ID MATCHES "^(AppleClang|Clang)$")
print("Using Clang")
include(${CMAKE_CURRENT_LIST_DIR}/compiler/clang.cmake)
elseif (CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
print("Using GCC")
include(${CMAKE_CURRENT_LIST_DIR}/compiler/gcc.cmake)
else()
fatal_error("Compiler '${CMAKE_CXX_COMPILER_ID}' is not supported")
endif()
- Clang、MinGW 和 MSVC 是三种常用的编译器或编译工具链,它们在支持的平台、编译目标和功能上各有不同。下面是它们之间的主要区别:
特性 |
Clang |
MinGW |
MSVC |
平台 |
macOS、Linux、Windows |
Windows |
Windows |
编译标准 |
支持最新的 C 和 C++ 标准 |
基于 GCC,支持 C/C++ |
支持最新的 C/C++ 标准,但相对较慢 |
工具链 |
基于 LLVM,可与 MSVC 集成 |
GNU 工具链(基于 GCC/GNU Compiler Collection) |
完全微软生态(专有工具链) |
库支持 |
依赖 LLVM 库,跨平台支持更好 |
依赖开源库,通常无需微软库 |
依赖微软运行时库 |
典型应用 |
跨平台开发,尤其是 macOS 和 Linux |
在 Windows 上使用 GNU 工具链 |
Windows 原生开发,Visual Studio 环境 |
- 从CMake 代码片段可以看出,该项目当前仅支持 Clang 和 GCC 编译器,下面的部分进行了 Visual Studio 2022 切换编译器。
