Использовали ли вы образец кода по ссылке github .
Если да, вам следует загрузить и затем использовать этот образец, а если вы создаете свой собственный проект, вы должны проверить свои проекты осторожно.
Заимствуя этот учебник для вашего проекта, я думаю, вам нужно обратить внимание на то, есть ли у вас какие-либо дополнительные настраиваемые цели в вашем файле xxx.vcxproj
, чтобы удалить файл PCH . Поэтому нужно внимательно проверять каждый файл xxx.vcxproj
. В vs некоторые файлы не будут удалены из-за разных имен файлов .pdb проекта PCH и других проектов, поэтому проверьте, есть ли у вас собственные дополнительные операции.
1) Почему файл .pch удаляется при запуске компиляции других проектов, что приводит к ошибке C1083 (.pch не найден), если имена PDB не совпадают, не как на этой странице?
Прежде всего , убедитесь, что в ваших проектах нет другой возможности удалить файл PCH.
Проект PCH должен создать файл PCH, а два других проекта должны использовать этот файл . И каждый раз, когда вы создаете два проекта (обратитесь к проекту PCH), всегда выполняйте сборку проекта PCH, а затем строите два проекта. Таким образом, PCH всегда создается и позже может использоваться в двух проектах.
Основываясь на , вы должны убедиться, что все три проекта создают и используют один и тот же адрес для файла.
Проект SharedPCH
ConsoleApplication1
ConsoleApplication2
В примере кода PCH файл существует под SharedPchSample\Outputs\Intermediate\Shared\Win32\Debug
.
2) Я копирую файлы pch.pdb и pch.idb с помощью команды COPY, есть ли команда RENAME или что-то в этом роде, если скопированный pch.pdb должен быть назван прямо как PDB зависимого проекта? И где я могу найти полный список команд Custom Build Step?
Custom Build Step находится под каждым проектом -> Properties
-> Custom Build Step
- > Command Line
, и тогда вы сможете его найти. Этот настраиваемый шаг - просто команда CMD. И вы можете выполнить CMD, чтобы выполнить дополнительную операцию.
Помимо , я думаю, вы хотите, чтобы эти xxx.pdb
и xxx.idb
совпадали с именем проекта по порядку отличать guish одно от другого. Вы можете щелкнуть правой кнопкой мыши по каждому проекту -> Properties
-> C/C++
-> Output Files
-> Program Database File Name
-> изменить его и использовать $(IntDir)$(ProjectName).pdb
. Подробнее о Custom Build Steps вы можете обратиться к по этой ссылке .
Мне непонятна цель «Дополнительные зависимости» и «Выводы» на этапе пользовательской сборки. Могу ли я ввести имя файла .pch в список зависимостей, чтобы оно не было удалено? Должен ли список вывода содержать имя PDB зависимого проекта, или pch.pdb, или и то, и другое?
Additional dependencies
настроено на использование содержимого файла PCH в проектах 1 и 2, которые являются аналогично настройке адреса библиотеки эталонных классов в проекте C ++. И я думаю, что это может быть излишним, и поскольку автор добавил это, что подразумевает, что оно хорошо обосновано.
И Outputs - это путь вывода, настроенный автором, автор изменил адрес вывода проекта и начал новый настраиваемый путь вывода и временный путь вывода.
Фактически , xxx.pch
и его файлы pdb
и idb
не будут скопированы в выходной путь. Таким образом, пользовательский шаг сборки заключается в копировании файлов во временный выходной путь. И если вы хотите скопировать их в окончательный путь вывода, вы также можете использовать их в файле CustomBuildStep.targets
:
<CustomBuildStep>
<Command>
if EXIST "$(SharedPdb)" xcopy /Y /F "$(SharedPdb)" "$(IntDir)"
if EXIST "$(SharedIdb)" xcopy /Y /F "$(SharedIdb)" "$(IntDir)"
if EXIST "$(SharedPdb)" xcopy /Y /F "$(SharedPdb)" "$(OutDir)"
if EXIST "$(SharedIdb)" xcopy /Y /F "$(SharedIdb)" "$(OutDir)"
</Command>
<Outputs>$(IntDir)vc$(PlatformToolsetVersion).pdb;</Outputs>
<Inputs>$(SharedPdb)</Inputs>
</CustomBuildStep>
И фактически, один проект ссылается на другой проект, а выходные файлы указанного проекта автоматически копируются в основной проект. Возможно, это связано с тем, что авторский проект SharePCH не создает файлы pdb и idb, поэтому эти файлы зависимого проекта не будут найдены в основном проекте.