Вопрос с предварительно скомпилированными заголовками - PullRequest
4 голосов
/ 15 июня 2010

Я сейчас реорганизую свой проект, и то, что раньше было простым приложением, теперь стало парой проектов C ++ - статическая библиотека и реальное приложение .

Iхотел бы разделить один предварительно скомпилированный заголовок между двумя проектами, но столкнулся с некоторыми проблемами при настройке путей к файлам .pdb.

Предположим, что мой первый проект называется Library и создает его файл .lib с соответствующимLibrary.pdb файл.Теперь второй проект называется Application и встраивает все в одну и ту же папку (.exe и другой Application.pdb файл).

Сейчас оба моих проекта создают свои собственные предварительно скомпилированныефайл заголовков (Library.pch и Application.pch) на основе один фактический заголовочный файл. Это работает, но я думаю, что это пустая трата времени, и я также думаю, что должен быть способ разделить один предварительно скомпилированный заголовок между двумя проектами.

Если в моем проекте Application я пытаюсьчтобы установить параметр Use Precompiled Header (/Yu) и установить его на Library.pch, он не будет работать из-за следующей ошибки:

error C2858: command-line option 'program database name "Application.pdb" inconsistent with precompiled header, which used "Library.pdb".

Итак, кто-нибудь знает какой-то трюк или способ поделиться один предварительно скомпилированный заголовок между двумя проектами с сохранением правильной отладочной информации?

Ответы [ 2 ]

2 голосов
/ 15 июня 2010

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

Поскольку вы также пишете о файле PDB, вы, вероятно, захотите отладить код библиотеки в своих приложениях. Это может быть достигнуто установкой параметра / Fd при компиляции библиотеки. Когда вы связываете библиотеку в своем приложении и компоновщик находит соответствующий файл PDB, вы получаете полную поддержку отладки.

1 голос
/ 15 июня 2010

Это звучит сложно и громоздко для настройки.Более того, это может оказаться невозможным вообще.

Вместо этого вы можете включить предварительно скомпилированный заголовок из одного приложения во второе.Он все равно будет скомпилирован один раз для второго проекта, но обслуживание становится простым, и вам не нужно переопределять зависимости во втором проекте (просто включите их).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...