Компилятор Intel использует неправильный заголовок - PullRequest
1 голос
/ 08 октября 2019

Я пытаюсь выяснить, почему Intel Compiler 18.0, который был установлен после моей установки Visual Studio 2017, использует файлы заголовков MSVC вместо своих собственных (так как это приводит кошибки).

Простой #include <vector> вызывает эту ошибку в иначе пустом модуле перевода при компиляции в проекте C ++ в Visual Studio

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 включает в любом случае? Переустановка не привела к каким-либо изменениям. Я просто не могу понять, почему это вызывает эту проблему. Есть идеи?

Ответы [ 2 ]

2 голосов
/ 08 октября 2019

Звучит так, как будто вам нужно отключить «Режим соответствия» (/permissive-) для конфигураций, использующих компилятор Intel! (Этот режим требует более строгого соблюдения стандартов, которые Intel C ++ не может обработать при использовании реализации STL MSVC.)

Щелкните правой кнопкой мыши проект: Свойства -> C / C ++ -> Язык и выберите «Нет». "для режима соответствия.

1 голос
/ 10 октября 2019

О полученном сообщении об ошибке:

Я думаю, что вы испытываете ту же проблему, что и эта , в большинстве случаев эта проблема вызвана несовместимость между Intel Parallel Studio XE version и VS version. Как и в том, что я предложил в вашем другом потоке , вам нужно установить более высокую версию Intel Parallel Studio XE для решения этой проблемы.

Просто чтобы быть уверенным, почемуэто использование MSVC включает в любом случае? Переустановка не привела к каким-либо изменениям. Я просто не могу понять, почему это вызывает эту проблему. Любые идеи?

Компилятор Intel C ++ работает расширение для VS. Вы можете проверить это в Tools=>Extensions and Updates:

enter image description here

Согласитесь с Адрианом 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. Когда мы right-click project=>Intel Compiler=>Use Intel C++, он изменил настройку platformToolSet, но все равно импортировал xx.cpp.targets как частьПроцесс сборки. Таким образом, вы можете увидеть сообщение об ошибке MSVC или что-то в выводе сборки.

...