VS 2015 Update 1中与Microsoft CodeGen的碰撞

[这篇文章是由戴夫·巴托洛梅奥(Dave Bartolomeo)和Clang/C2特写组撰写的]

null

开发和维护跨平台C++代码的挑战之一是处理不同平台的不同C++编译器。您编写一些代码,用VisualC++编译器构建Windows目标构建,但Android目标设置却中断了,因为CLAN对标准一致性更严格,代码意外地依赖Visual C++更为宽松。或者,您编写了用Con for IOS成功构建的新代码,只发现您使用了VisualC++不支持的相对新的C++语言特性,现在您既不需要使用该语言特征就可以重新实现代码,也可以维护一个与Visual C++一起使用的单独实现,用于Windows构建。

为了更容易地开发适用于Windows和其他平台的跨平台代码,我们为visualstudio发布了一个额外的编译器工具集,名为 与Microsoft CodeGen的碰撞 . 此编译器使用 开源Clang解析器 对于C++和C++,以及VisualC++编译器中的代码生成器和优化器。这样就可以使用与其他目标相同的CLAN解析器编译Windows的跨平台代码,而在构建Windows时仍然利用VisualC++优化工具的高级优化。因为新的工具集使用了与非Windows目标相同的铿锵解析器,所以您不需要使用令人讨厌的解析器 #ifdefs 通篇代码只是为了说明编译器之间的差异。此外,代码可以利用VisualC++编译器中当前无法使用的语言特征,包括C99复杂类型和C++ 14扩展。 constexpr 支持。因为基于CLAN的编译器生成与Visual C++编译器相同的调试信息格式,您仍然可以用相同的VisualStudio调试程序调试代码。

用新工具集编译的代码可以与Visual C++ 2015 C和C++编译器编译的其他代码链接。通常,您将使用微软CODEGEN编译Clang的跨平台部分,并使用常规VisualC++工具集编译任何Windows特定代码(例如,您的UI)。

请注意,Clang与microsoftcodegen目前是一个预览功能。 我们知道有些地方不完整或有缺陷。我们想让这个特性进入您的手中,给您一个尝试的机会,了解它将如何在您的代码中工作,并给我们反馈。

安装

在VisualStudio安装的VisualStudio安装程序的UI选择中,您将看到微软CordEGN在“跨平台和移动开发Visual C++移动开发”下的Clang复选框。选中此框将安装新的工具集和相应的项目模板。

Visual Studio Install Dialog

使用新工具集

要创建一个新的静态库或DLL项目,使用Clang和microsoftcodegen,您可以使用“visualc++跨平台”下的一个新项目模板。

图片[2]-VS 2015 Update 1中与Microsoft CodeGen的碰撞-yiteyi-C++库

迁移现有项目

若要在现有项目中使用新工具集,请转到项目属性,并将“Platform toolset”下拉列表从“Visual Studio 2015”更改为“Clang 3.7 with Microsoft CodeGen”。在切换到编辑其他属性以让项目系统加载相应的工具集定义之前,请确保单击“应用”。

图片[3]-VS 2015 Update 1中与Microsoft CodeGen的碰撞-yiteyi-C++库

在此预览版本中,我们不支持在“Visual Studio 2015”和“Clang 3.7 with Microsoft CodeGen”工具集之间自动迁移相关属性的值,因此您必须手动修复任何无效值。当旧工具集中的属性值在新工具集中无效时,项目系统将发出错误。只有从工具集的默认值中重写的值(在项目属性中用粗体字体标记)才会遇到这些错误;未更改的值将在新工具集中自动切换为默认值。在大多数情况下,将无效值更改为“inherit from parent or project defaults”可以解决问题。有些情况你可能需要解决 在其他方面:

  • 有些默认设置不是您在本版本中所期望的。我们将在将来的版本中更改默认值。
  • 当从MSVC工具集更改时,异常处理在默认情况下是关闭的,即使异常处理工作正常。开发人员可以手动覆盖此开关。默认值将在下一版本中更改。
  • 当前不支持预编译头,因此必须禁用它们的用法。如果不这样做,通常会出现“错误:生成多个输出文件时无法指定-o”。如果在禁用预编译头的情况下仍然看到此错误,请确保在Clang toolset中将“Object File Name”属性的值重置为其默认值“$(IntDir)%%(filename).obj”。
  • 如果您试图转换的项目中的源文件是UTF-16编码的,那么当Clang向您提供关于UTF-16编码源和BOM的错误时,您需要将它们重新保存为UTF-8。
  • 如果出现“error:use of undeclared identifier’OWRONLY’”错误,请在项目设置宏中定义 __STDC=0。
  • 如果出现错误“TRK0005:找不到:”clang.exe“。系统找不到指定的文件“,您可能正在使用AMD64托管编译器。我们目前不支持AMD64托管编译器对Clang/C2工具集的支持。看到了吗 在这里 如何使您的项目x86托管。
  • 如果您计划使用“VS 2015 x86 Native Tools Command Prompt”,请注意,在当前版本中,clang.exe不能通过PATH环境变量立即可用。您需要修改您的环境以直接使用clang.exe。

确定您的平台和工具集

编译器工具集通常定义一组宏,帮助代码适应编译器工具集和目标的不同版本。下面的表格显示了一些相关的宏,这些宏是用microsoftcodegen在Clang中定义的,您可以在代码中包含一个代码示例来帮助确定平台和工具集的组合。

目标体系结构

x86个

工具集

C1xx/C2型

叮当声/C2

叮当声/LLVM

工具链

fno公司 微软 -兼容性

微软

微软

__ cplusplus公司

199711升

201402L公司

201402L公司

201103L型

201103L型

201103L型

_WIN32操作系统

1

1

1

1

1

1

_WIN64系列

_理学硕士

1900

1900

1900

1800

1800

_MSC完整版本

190023506

190000000

190000000

180000000

180000000

__叮当声__

1

1

1

1

__ 铿锵版 __

“3.7.0 (…)”

“3.7.0 (…)”

“3.8.0 (…)”

“3.8.0 (…)”

__ llvm公司 __

1

1

__指挥与控制__

1

1

__c2U版本__

190023413

190023413

__GNUC公司__

4

4

4

__小调GNUC__

2

2

8

__GNUCU补丁级别__

1

1

1

__明32__

1

__明W64__

__赛文__

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享