如何在 MSBuild 中使用 Clang 编译器?

How to use Clang compiler with MSBuild?

我正在尝试将通常在 Windows 上使用 Microsoft C++ 编译的几个项目改为使用 clang 进行编译。

从好的方面来说,存在 clang-cl.exe,它被设计为 cl.exe 的直接替代品。但是,即使我将 clang-cl.exe 作为 cl.exe 复制到当前目录中,msbuild 在某些情况下仍会调用 Microsoft 的 cl.exe.

有没有办法告诉 msbuild 'here, when executing Task CL, use this cl.exe instead of the usual one'? msbuild 的命令行选项不包含任何明显的方向。

此外,有没有办法告诉它在不更改项目文件的情况下为 cl 提供或覆盖命令行参数?

这很容易从命令行或项目文件中完成。您需要配置的属性是 $(CLToolExe)$(CLToolPath)

从命令行:

msbuild MyProj.vcxproj /p:CLToolExe=clang-cl.exe /p:CLToolPath=c:\whatever\path\to\the\tool

或者,在您的 .vcxproj 文件中:

<PropertyGroup>
  <CLToolExe>clang-cl.exe</CLToolExe>
  <CLToolPath>c:\whatever\path\to\the\tool</CLToolPath>
</PropertyGroup>

如果您直接在 .vcxproj 文件中调用任务 CL,而不是仅仅依赖通用目标,只需设置 CL 任务的相应参数 ToolExeToolPath

从Visual Studio2019 16.2开始,微软提供了MSbuild和ClangCl的集成。所以这可以通过以下方式实现:

  • 正在安装“Windows 的 C++ Clang 工具”组件
  • 在 IDE
  • 中选择“LLVM (clang-cl)”工具集

Microsoft 的博客 post 对此有更多信息:https://devblogs.microsoft.com/cppblog/clang-llvm-support-for-msbuild-projects/

我使用 @seva 解决方案有一段时间了,尽管在 Visual studio 版本 16.10.1 中只有在命令行参数中省略 'CL' 前缀时它才对我有用。即:

msbuild MyProj.vcxproj /p:ToolExe=clang-cl.exe /p:ToolPath=c:\whatever\path\to\the\tool