我试图通过使用Microsoft C ++在Windows上编译的几个项目,然后用clang编译它们。
在好的方面,存在clang-cl.exe,它被设计为cl.exe的替代品。但是,即使我将clang-cl.exe作为cl.exe复制到当前目录中,msbuild在某些情况下仍然会调用Microsoft的cl.exe。
有没有办法告诉msbuild'这里,在执行任务CL时,使用这个cl.exe而不是通常的一个'? msbuild的命令行选项不包含任何明显的方向。
另外,有没有办法告诉它在不更改项目文件的情况下为cl提供或覆盖命令行参数?
答案 0 :(得分:6)
从命令行或项目文件中可以轻松完成。您需要配置的属性为$(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任务的相应参数ToolExe
和ToolPath
。
答案 1 :(得分:1)
自Visual Studio 2019 16.2起,Microsoft提供了MSbuild和ClangCl的集成。因此,可以通过以下方式实现:
Microsoft的博客文章对此有更多信息:https://devblogs.microsoft.com/cppblog/clang-llvm-support-for-msbuild-projects/
答案 2 :(得分:1)
我使用@seva 解决方案有一段时间了,但在 Visual Studio 版本 16.10.1 中,只有在命令行参数中省略了“CL”前缀时,它才对我有用。即:
msbuild MyProj.vcxproj /p:ToolExe=clang-cl.exe /p:ToolPath=c:\whatever\path\to\the\tool