меняется с `stdafx.h` на` pch.h` - PullRequest
0 голосов
/ 02 ноября 2018

Я клонирую репозиторий, решение c ++ с 3 проектами, консольное приложение .exe проект dll .dll и модульный тест .dll. Я не уверен, с какой версией VS или компилятором он был собран или создан.

создание решения на моей машине приводило к ошибке

неожиданный конец файла при поиске предварительно скомпилированного заголовка. Вы подделали t добавить '#include "pch.h" к вашему источнику?

Я создал pch.h и pch.cpp согласно другому решению в каждом проекте.

изменил properties->c/c++->precompiled headers каждого проекта на

  • precompiled header = Create (/Yc)
  • precompiled header file = pch.h
  • precompiled header output file = $(IntDir)$(TargetName).pch

очистили решение и удалили все в Debug папках

теперь строит решение бросает

фатальная ошибка C1010: неожиданный конец файла при поиске предварительно скомпилированного заголовка. Вы подделали t добавить '#include "stdafx.h" к вашему источнику?

  • Также это была ошибка, которую показывали конвейеры Azure. поэтому, чтобы быть ближе к процессу сборки конвейера, я использую msbuild.exe из командной строки VS. Странная часть для меня заключается в том, что щелчок правой кнопкой мыши VC ++ на решении и сборке не показывает ошибок и сборок проекта, а после этого msbuild.exe также перестраивается без ошибок. Но удаление всего из папок отладки и повторная попытка msbuild.exe снова показывает эти ошибки!

Как заставить все проекты в решении использовать stdafx.h или pch.h

1 Ответ

0 голосов
/ 02 ноября 2018

Предварительно скомпилированные заголовки - это функция, позволяющая ускорить процесс сборки, поэтому, если у вас возникают проблемы со сборкой, вы всегда можете отключить предварительно скомпилированные заголовки (выберите «Не использовать предварительно скомпилированные заголовки» в настройках проекта для всего проекта) и сборка должна работать.

Если вы хотите создать проект с предварительно скомпилированными заголовками, у вас должна быть опция «Создать» только для одного исходного файла (pch.cpp или stdafx.cpp), который содержит только оператор включения для предварительно скомпилированного заголовочного файла. Все остальные исходные файлы должны иметь предварительно выбранный заголовок «use». Также они должны иметь правильный оператор #include для вашего предварительно скомпилированного заголовка в качестве первой строки без комментариев в файле.

Идея состоит в том, что компилятор создает дамп своего внутреннего состояния при обработке предкомпилированного оператора заголовка #include в файле с установленной опцией 'create'. Затем он загружает этот дамп, когда видит соответствующее включение в файлах с включенной опцией 'use'. Загрузка дампа может быть намного быстрее, чем, например, Разбор через windows.h. Поэтому вы должны помещать любые часто используемые операторы большого файла заголовка #include в файл pch.h или stdafx.h.

Полученные вами сообщения об ошибках выдаются, если в файле .cpp включена опция 'use', но инструкция #include с именем файла, указанным в опции 'precompiled header file' ', не найдена.

...