我听说过 clang-cl 是 clang 的“微软风格”版本,但查看我的配置时,我观察到以下情况:
- 我的 msys2 目录中有一个可执行 clang
- 我的 msys2 目录中有一个可执行文件 clang-cl
- 我的 visual-studio 构建工具目录中有一个可执行 clang
- 我的 visual-studio 构建工具目录中有一个可执行文件 clang-cl
这些版本之间有什么区别?(最终我想看看是否值得在我的编译框架中添加对 clang-cl 的支持)
附加数据:使用 -v 调用每个数据,可以Target: x86_64-w64-windows-gnu
得到第一个和Target: x86_64-pc-windows-msvc
所有其他数据。
clang
[++
] vsclang-cl
通常仅影响命令行参数的样式。clang
[++
] 类似于 GCC,并且是主要接口。clang-cl
类似于 MSVC(MSVC =cl.exe
)。显然,在 MSYS2 Clang 中它还将其从 MinGW 兼容模式切换到 MSVC 兼容模式(见
--target
下文)。您可以使用
clang
[++
] 和clang-cl
来编译 MSVC 兼容程序。(尽管前者需要知道要传递哪些标志,但这并不明显。)我怀疑用它clang-cl
来编译非 MSVC 兼容程序(例如 MinGW 兼容或根本不适用于 Windows 的程序)是否有意义。Clang 与 MSYS2 Clang 的官方构建影响默认值
--target=...
(使用 MSVC ABI 和库 vs MinGW ABI 和库)。这可以在 中看到clang --version
。Visual Studio 安装的 Clang,和 Clang 官方安装程序一样,
--target
默认使用 MSVC 兼容。我不知道它们之间有什么区别。如果您支持 MSVC(
cl.exe
),那么支持clang-cl
就很简单,因为标志(大部分?)相同。