[这篇文章是由戴夫·巴托洛梅奥(Dave Bartolomeo)和Clang/C2特写组撰写的]
开发和维护跨平台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复选框。选中此框将安装新的工具集和相应的项目模板。
使用新工具集
要创建一个新的静态库或DLL项目,使用Clang和microsoftcodegen,您可以使用“visualc++跨平台”下的一个新项目模板。
迁移现有项目
若要在现有项目中使用新工具集,请转到项目属性,并将“Platform toolset”下拉列表从“Visual Studio 2015”更改为“Clang 3.7 with Microsoft CodeGen”。在切换到编辑其他属性以让项目系统加载相应的工具集定义之前,请确保单击“应用”。
在此预览版本中,我们不支持在“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
喜欢就支持一下吧 相关推荐
|