How to use Clang compiler with MSBuild?

6.4k views Asked by At

I'm trying to take a couple of projects normally compiled on Windows with Microsoft C++ and compile them with clang instead.

On the upside, there exists clang-cl.exe which is designed to be a drop-in replacement for cl.exe. However, even when I copy clang-cl.exe into the current directory as cl.exe, msbuild still in some cases calls Microsoft's cl.exe.

Is there a way to tell msbuild 'here, when executing Task CL, use this cl.exe instead of the usual one'? msbuild's command line options don't contain anything obvious in that direction.

Also, is there a way to tell it to supply or override command line parameters for cl without changing the project file?

3

There are 3 answers

0
seva titov On BEST ANSWER

This is easy to do from either command line or project file. The properties you need to configure are $(CLToolExe) and $(CLToolPath).

From the command line:

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

Alternatively, inside your .vcxproj file:

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

If you are calling task CL directly inside your .vcxproj file, as opposed to just relying on common targets, just set corresponding parameters ToolExe and ToolPath of the CL task.

0
Nicker On

I were using @seva solution for sometime, though in Visual studio version Version 16.10.1 it works for me only if the 'CL' prefix is omitted from the command line parameters. i.e.:

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

Since Visual Studio 2019 16.2, Microsoft provide an integration of MSbuild and ClangCl. So this can be achieved by:

  • Installing the “C++ Clang Tools for Windows” component
  • Choosing the "LLVM (clang-cl)” toolset in the IDE

Microsoft's blog post has more information on this: https://devblogs.microsoft.com/cppblog/clang-llvm-support-for-msbuild-projects/