Как лучше всего включать сторонние заголовки в ваш проект C ++? - PullRequest
1 голос
/ 28 сентября 2010

Я создаю кучу библиотек Windows (в основном простых оболочек для объединения функций из API и сторонних библиотек), которые затем будут использоваться набором приложений, которые предъявляют очень похожие требования.

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

Я хотел бы иметь возможность извлекать библиотеку A из контроля версий и быть готовым к компиляции без извлечения libraryCommon илиlibraryB, от которой зависит libraryA.Единственный способ, который я могу понять, - это скопировать все сотни заголовков из общей библиотеки во все библиотеки, но это своего рода уродливое решение.

Итак, каков наилучший способ хранения файлов заголовков сторонних производителей?в ваш проект C ++?Существует ли что-то вроде библиотеки / пакетов заголовков?

В настоящее время я работаю с Visual Studio 2008, но мне нужно более стандартное решение C ++.

Ответы [ 3 ]

3 голосов
/ 28 сентября 2010

Если библиотеки относятся к конкретному проекту, вам нужно установить библиотеки в известном месте (/ project / $ FOO / или D: \ projects \ $ FOO) и добавить номер версии в каталог потому что рано или поздно вы в конечном итоге поддержите магистраль разработки и пару более старых выпусков, которые находятся в производстве и нуждаются в периодических исправлениях.

Итак, создайте:

  • / проект / $ FOO-1,00
  • / проект / $ FOO-1,05
  • / проект / $ FOO-1,80

Затем в make-файле для реального проекта, использующего эти библиотеки, укажите правильную версию для использования. НЕ используйте имена каталогов с версиями при обращении к заголовку из исходного кода.

Не так:

#include <$FOO-1.05/base.h>

но вот так:

#include <base.h>

Поскольку вы не хотите трогать весь исходный код при обновлении библиотеки.

0 голосов
/ 28 сентября 2010

Детали немного различаются для сред Windows и Linux / Unix, но их объединяет то, что вы не копируете заголовки из сторонней библиотеки в свой собственный проект , Это просто вызывает проблемы при обновлении этих заголовков.

Если libraryCommon и libraryB следует рассматривать как поддерживаемые извне библиотеки, обновления для которых вы получаете только при наличии нового официального выпуска, тогда рекомендуется установить последнюю версию этих библиотек, и вы сообщите компилятору, в каком месте библиотека установила свои заголовки (в Linux / Unix обычно /usr/include или /usr/local/include, в Windows обычно там, где вы сбрасывали исходные коды).
Если предполагается, что вы используете самую последнюю версию этих библиотек из VCS, вам будет проще выполнить извлечение библиотек и сообщить вашему компилятору, где в процессе извлечения размещены заголовочные файлы.

Другая причина, по которой заголовки из libraryCommon и libraryB недостаточны, заключается в том, что вам нужно будет ссылаться на эти библиотеки, когда вы будете проверять, работают ли ваши модификации в libraryA так, как они должны работать.

0 голосов
/ 28 сентября 2010

Скажи, что твоя общая библиотека - буст. Затем вы должны установить его, например, в c: \ boost и добавить c: \ boost в список каталогов, в которых Visual Studio ищет заголовки. В Unix вы должны установить заголовки в / usr / include (или / usr / local / include), где они будут автоматически найдены.

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