2

我试图找出为什么在我的 Visual Studio 2017Intel Compiler 18.0安装安装的 使用 的头文件MSVC,而不是它自己的头文件(因为它会导致错误)。

在 Visual Studio 中的 C++ 项目中编译时,一个简单#include <vector>的在其他为空的翻译单元中触发此错误

1>C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\VC\Tools\MSVC\14.16.27023\include\type_traits(1562): error : expected a ">"
1>      _INLINE_VAR constexpr bool _Is_specialization_v<_Template<_Types...>, _Template> = true;

只是为了确定,为什么它仍然使用MSVC包含?重新安装没有导致任何变化。我根本无法弄清楚,为什么它会导致这个问题。有任何想法吗?

4

2 回答 2

2

/permissive-听起来您需要为使用英特尔编译器的配置关闭“一致性模式”( )!(此模式强制遵守更严格的标准,在使用 STL 的 MSVC 实现时,英特尔 C++ 无法处理这些标准。)

右键单击项目:属性 -> C/C++ -> 语言,然后为一致性模式选择“否”。

于 2019-10-08T03:09:00.903 回答
2

关于您收到的错误消息:

我认为您遇到了与相同的问题,在大多数情况下,此问题是由 和 之间的不兼容引起的。就像我在您的另一个线程中建议的那样,您需要安装更高版本的 Intel Parallel Studio XE 版本才能解决此问题。Intel Parallel Studio XE versionVS version

可以肯定的是,为什么它仍然使用 MSVC 包含?重新安装没有导致任何变化。我根本无法弄清楚,为什么它会导致这个问题。有任何想法吗?

英特尔 C++ 编译器是 VS 的扩展。你可以检查它Tools=>Extensions and Updates

在此处输入图像描述

同意阿德里安I don't think Intel would want to 'take ownership' of MFC。对于一个简单的 C++ 项目,如果我们将 Intel C++ 编译器设置为它的编译器,那么后面究竟会发生什么?让我们看看项目文件(xx.vcxproj):

它设置<PlatformToolset>Intel C++ Compiler 19.0</PlatformToolset>,并可能对 进行一些其他更改,但该项目在其项目文件中xx.vcxproj仍有定义,如<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />, 。<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />

所以在构建过程中仍然会导入一些关于 MSVC 的属性和定义。这就是为什么您收到的错误消息包含MSVC...

笔记:

  1. MSbuild是VS的构建引擎,它读取内容xx.vcxproj来编译和构建项目。

  2. 在导入的目标文件中定义了许多任务、属性、正常 C++ 构建过程的项目,例如Microsoft.Cpp.Default.props等等$(VCTargetsPath)\Microsoft.Cpp.targets

  3. 当 we 时right-click project=>Intel Compiler=>Use Intel C++,它​​更改了 platformToolSet 设置,但它仍然导入 xx.cpp.targets 作为构建过程的一部分。因此,您可以看到有关 MSVC 的错误消息或构建输出中的内容。

于 2019-10-10T07:39:19.760 回答