英特尔编译器使用错误 header

Intel Compiler uses wrong header

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

当在 Visual Studio

中的 C++ 项目中编译时,一个简单的 #include <vector> 在原本为空的翻译单元中触发此错误
1>C:\Program Files (x86)\Microsoft Visual Studio17\Professional\VC\Tools\MSVC.16.27023\include\type_traits(1562): error : expected a ">"
1>      _INLINE_VAR constexpr bool _Is_specialization_v<_Template<_Types...>, _Template> = true;

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

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

右键单击项目:属性 -> C/C++ -> 语言然后 select "No" 为一致性模式。

About the error message you got:

我认为您遇到了与this one, in most time this issue is caused by the incompatibility between Intel Parallel Studio XE version and VS version. Just like what I suggested in your 相同的问题,您需要安装更高版本的 Intel Parallel Studio XE 版本才能解决该问题。

Just to be sure, why is it using the MSVC includes anyway? A reinstallation did not result in any change. I simply can't figure out, why it's causing this problem. Any ideas?

英特尔 C++ 编译器为 VS 提供扩展。您可以在 Tools=>Extensions and Updates:

中查看

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