Рецепты 1.3, 1.11 и 1.16.
1.9. Сборка динамической библиотеки с помощью Boost.Build
Вы хотите использовать Boost.Build для сборки динамической библиотеки из набора исходных файлов С++, таких как перечисленные в примере 1.2.
В директории, где вы хотите создать динамическую библиотеку и, если надо, библиотеку импорта, создайте файл lib
, объявляющее целевую библиотеку, указав в качестве исходных файлов свои файлы .cpp и используя в качестве требования свойство <link>shared
. Чтобы указать директорию поиска заголовочных файлов библиотеки, т.е. директорию, относительно которой должны разрешаться директивы include
для заголовочных файлов этой библиотеки, добавьте требование к использованию в виде <include>
. Если исходные файлы включают заголовки от других библиотек, то чтобы сказать компилятору, где искать заголовочные файлы, вам может потребоваться добавить несколько требований в виде <include>
. Чтобы гарантировать, что символы вашей динамической библиотеки будут экспортированы в Windows с помощью директивы __declspec (dllexport)
, вам также может потребоваться добавить одно или несколько требований в виде <define>
. Наконец, в директории, содержащей
Например, чтобы собрать из исходных файлов, перечисленных в примере 1.2, динамическую библиотеку, создайте в директории
# Jamfile для проекта georgeringo
lib libgeorgeringo
: # исходники
george.cpp ringo.cpp georgeringo.cpp
: # требования
<link>shared
<define>GEORGERINGO_DLL
: # сборка-по-умолчанию
: # требования-к-использованию
<include>..
;
Чтобы собрать библиотеку, введите:
> bjam libgeorgeringo
Как обсуждалось в рецепте 1.8, правило lib
используется для объявления цели, представляющей статическую или динамическую библиотеку. Использование требования <include>..
освобождает проект, который зависит от вашей библиотеки, от необходимости явно указывать в своих требованиях директорию заголовочных файлов вашей библиотеки. Требование <link>shared
указывает, что цель должна всегда собираться как динамическая библиотека. Если вы хотите иметь возможность собирать библиотеку и как статическую, и как динамическую, опустите требование <link>shared
и укажите это свойство в командной строке или в требованиях цели, которая зависит от вашей целевой библиотеки. Однако написание библиотеки, которая может быть собрана и как статическая, и как динамическая, требует особого внимания, так как для правильного экспорта символов в Windows требуется использовать директивы препроцессора. Хорошим упражнением является переписывание примера 1.2 так, чтобы его можно было собрать и как статическую, и как динамическую библиотеку.
Рецепты 1.4, 1.12, 1.17 и 1.19.
1.10. Сборка сложного приложения с помощью BoostBuild
Вы хотите использовать Boost.Build для сборки исполняемого файла, зависящего от нескольких статических и динамических библиотек.
Выполните следующие шаги.
1. Для каждой библиотеки, от которой зависит исполняемый файл, — при условии, что она не распространяется в виде готового бинарного файла, — создайте Jam-файл, как описано в рецептах 1.8 и 1.9.
2. В директории, где вы хотите создать исполняемый файл, создайте файл
3. В файле <include>
, чтобы сказать компилятору, где искать заголовочные файлы библиотек.
4. В файле install
, определяющее в качестве требований свойства <install-dependencies>on
, <install- type>EXE
и <install-type>SHARED_LIB
.
5. В директории, содержащей
6. Например, чтобы собрать из исходных файлов, перечисленных в примере 1.3, исполняемый файл, создайте в директории
# Jamfile для проекта hellobeatles
exe hellobeatles
: # исходники
../johnpaul//libjohnpaul
../georgeringo//libgeorgeringo
hellobeatles.cpp
;
install dist
: # исходники
hellobeatles
: # требования