官宣:VS2019 Clang/LLVM对MSbuild工程的支持
在最新版本的VS2019预览版中,开发团队增加了Clang/LLVM对MSBuild工程的支持。
在稍早一些的时候,也就是今年4月24日的时候,VS开发团队宣布:Clang/LLVM对CMake的支持。就在前两天,也就是7月11日的时候,VS开发团队再次将Clang/LLVM的支持涵盖到了MSBulid类型的工程。
开发团队在其博文中也比较务实:”在大部分情况下,我们推荐我们的用户使用MSVC编译器,我们也致力于提供”宇宙最强”IDE,但是,我们的用户可能为了编写跨平台代码而选择Clang,尤其是那些编写已经依赖Clang或者GCC扩展的代码的用户”。
在最新的16.2预览版3中,我们可以面向Windows和Linux这两种平台,借助MSBuild的强大威力来编写Clang/LLVM代码,另外Clang的版本也同时更新至8.0.0.
安装Clang工具包
在默认的安装模式下,Clang工具包不会被选中,我们需要在安装的时候勾选对应的选项(C++ Clang Tools for Windows)来安装,如下图所示:
如果不想使用VS提供的默认Clang编译器而是使用自己的Clang编译器,我们可以在安装选项Individual Components中选择:C++ Clang-cl for v142 build tools”。但是VS开发团队还是强烈建议我们使用默认自带的Clang编译器。
对于Linux系统上的Clang项目,只需要选择一个组件就可以了:Linux development。值得注意的是,远程机器或者本机WSL实例需要安装有Clang环境,具体可以参考Linux发型商的安装指南或者LLVM官网指导页面。
Windows MSBuild工程中使用Clang
有了这个内置的支持,我们可以在大部分面向Windows系统的MSBuild项目中使用Clang。我们首先创建一个C++工程,或者打开一个现有的C++代码工程,然后在Platform Toolset中选择:LLVM(clang-cl),如下图所示:
如果你没有看到有这个选项,那很可能是因为Clang工具包没有成功安装,请参照前述中的安装说明。
Platform Toolset修改为Clang后,VS将使用Clang-cl作为编译前端,大部分有关Clang的属性将和基于MSVC编译器时的属性一致,但有些特性,例如Just My Code,因为Clang编译器不支持,所以,这些不受支持的特性将不会显示在VS的属性页中。
Linux MSBuild工程中使用Clang
对于Linux平台上使用Clang,步骤也比较简单,还是选择对应的Platform Toolset。对于Linux项目来说,有两种不同的toolset可供选择,一个是用于本机WSL实例的Clang toolset,另一个是用于远程主机的Clang toolset,如下图所示:
当然,对于Linux项目,工程的大部分属性都和MSVC编译器前端一致。
Clang的自定义安装和编译器参数
当然,我们也可以使用自定义的方式来安装Clang。
在Windows上,默认情况下,VS会使用Clang安装包安装的内置版本,在Linux上,第一个被安装到PATH环境变量中的Clang版本将被VS使用。如果这不是你想要的,可以通过在工程文件中设定一个属性值来重新设置要使用的Clang版本,如下图所示:
要注意的是,使用以上自定义的方法时,你需要先卸载工程,然后修改工程文件,然后重新加载工程。另外,Microsoft STL仅Clang的最新版本,也即8.0.0版本兼容。如果你还需要使用STL,就要检查你使用的的Clang版本了。
有些时候,我们在VS属性设置界面中,可能没有找到想要设定的Clang编译参数,不要着急,可以在编译的命令行中手动输入,这里的编译命令行是在项目属性页的onfiguration Properties > C/C++ or Linker > Command Line下。
最后的最后,如果VS团队觉得有一些Clang编译器参数非常常用,那么他们可以考虑将这些参数加入工程的属性页中。
结语
VS开发团队一直致力于打造一个全功能的开发环境,目前的最新版本是:Visual Studio 2019 version 16.2 Preview 3。让我们期待下一个激动人心的特性吧。
来源
这篇文章的内容翻译自:Microsoft C++ Team Blog,感谢阅读。
相关推荐
- 编译器浏览器:现已支持代码执行和静态分析
- Posted on 03月03日
- 用户界面对象的线程亲缘性第二篇: 设备上下文
- Posted on 05月04日
- 浅谈COM对象的内存布局
- Posted on 12月02日
- 桌面窗口的特殊性
- Posted on 12月19日
评论已关闭。