Читаем C++. Сборник рецептов полностью

Вы хотите использовать Boost.Build для сборки динамической библиотеки из набора исходных файлов С++, таких как перечисленные в примере 1.2.

Решение

В директории, где вы хотите создать динамическую библиотеку и, если надо, библиотеку импорта, создайте файл Jamroot. В файле Jamroot вызовите правило lib, объявляющее целевую библиотеку, указав в качестве исходных файлов свои файлы .cpp и используя в качестве требования свойство shared. Чтобы указать директорию поиска заголовочных файлов библиотеки, т.е. директорию, относительно которой должны разрешаться директивы include для заголовочных файлов этой библиотеки, добавьте требование к использованию в виде путь. Если исходные файлы включают заголовки от других библиотек, то чтобы сказать компилятору, где искать заголовочные файлы, вам может потребоваться добавить несколько требований в виде путь. Чтобы гарантировать, что символы вашей динамической библиотеки будут экспортированы в Windows с помощью директивы __declspec(dllexport), вам также может потребоваться добавить одно или несколько требований в виде символ. Наконец, в директории, содержащей Jamroot, запустите bjam, как описано в рецепте 1.7.

Например, чтобы собрать из исходных файлов, перечисленных в примере 1.2, динамическую библиотеку, создайте в директории georgeringo файл с именем Jamroot, показанный в примере 1.12.

Пример 1.12. Jam-файл для сборки динамической библиотеки georgeringo.so, georgeringo.dll или georgeringo.dylib

# Jamfile для проекта georgeringo

lib libgeorgeringo

 : # исходники

  george.cpp ringo.cpp georgeringo.cpp

 : # требования

  shared

  GEORGERINGO_DLL

 : # сборка-по-умолчанию

 : # требования-к-использованию

  ..

 ;

Чтобы собрать библиотеку, введите:

> bjam libgeorgeringo

Обсуждение

Как обсуждалось в рецепте 1.8, правило lib используется для объявления цели, представляющей статическую или динамическую библиотеку. Использование требования .. освобождает проект, который зависит от вашей библиотеки, от необходимости явно указывать в своих требованиях директорию заголовочных файлов вашей библиотеки. Требование shared указывает, что цель должна всегда собираться как динамическая библиотека. Если вы хотите иметь возможность собирать библиотеку и как статическую, и как динамическую, опустите требование shared и укажите это свойство в командной строке или в требованиях цели, которая зависит от вашей целевой библиотеки. Однако написание библиотеки, которая может быть собрана и как статическая, и как динамическая, требует особого внимания, так как для правильного экспорта символов в Windows требуется использовать директивы препроцессора. Хорошим упражнением является переписывание примера 1.2 так, чтобы его можно было собрать и как статическую, и как динамическую библиотеку.

Смотри также

Рецепты 1.4, 1.12, 1.17 и 1.19.

<p>1.10. Сборка сложного приложения с помощью BoostBuild</p>Проблема

Вы хотите использовать Boost.Build для сборки исполняемого файла, зависящего от нескольких статических и динамических библиотек.

Решение

Выполните следующие шаги.

1. Для каждой библиотеки, от которой зависит исполняемый файл, — при условии, что она не распространяется в виде готового бинарного файла, — создайте Jam-файл, как описано в рецептах 1.8 и 1.9.

2. В директории, где вы хотите создать исполняемый файл, создайте файл Jamroot.

3. В файле Jamroot вызовите правило exe, объявляющее целевой исполняемый файл. Укажите свои файлы .cpp и цели библиотек, от которых исполняемый файл зависит как от источников. Также, если требуется, добавьте свойства вида путь, чтобы сказать компилятору, где искать заголовочные файлы библиотек.

4. В файле Jamroot вызовите правило install, определяющее в качестве требований свойства on, EXE и SHARED_LIB.

5. В директории, содержащей Jamroot, запустите bjam, как описано в рецепте 1.7.

6. Например, чтобы собрать из исходных файлов, перечисленных в примере 1.3, исполняемый файл, создайте в директории hellobeatles файл с именем Jamroot, показанный в примере 1.13.

Пример 1.13. Jam-файл для сборки исполняемого файла hellobeatles.exe или hellobeatles

# Jamfile для проекта hellobeatles

exe hellobeatles

 : # исходники

  ../johnpaul//libjohnpaul

  ../georgeringo//libgeorgeringo

  hellobeatles.cpp

 ;

install dist

 : # исходники

  hellobeatles

 : # требования

  on

  EXE

  SHARED_LIB

  .

 ;

Перейти на страницу:

Похожие книги

1С: Бухгалтерия 8 с нуля
1С: Бухгалтерия 8 с нуля

Книга содержит полное описание приемов и методов работы с программой 1С:Бухгалтерия 8. Рассматривается автоматизация всех основных участков бухгалтерии: учет наличных и безналичных денежных средств, основных средств и НМА, прихода и расхода товарно-материальных ценностей, зарплаты, производства. Описано, как вводить исходные данные, заполнять справочники и каталоги, работать с первичными документами, проводить их по учету, формировать разнообразные отчеты, выводить данные на печать, настраивать программу и использовать ее сервисные функции. Каждый урок содержит подробное описание рассматриваемой темы с детальным разбором и иллюстрированием всех этапов.Для широкого круга пользователей.

Алексей Анатольевич Гладкий

Программирование, программы, базы данных / Программное обеспечение / Бухучет и аудит / Финансы и бизнес / Книги по IT / Словари и Энциклопедии
1С: Управление торговлей 8.2
1С: Управление торговлей 8.2

Современные торговые предприятия предлагают своим клиентам широчайший ассортимент товаров, который исчисляется тысячами и десятками тысяч наименований. Причем многие позиции могут реализовываться на разных условиях: предоплата, отсрочка платежи, скидка, наценка, объем партии, и т.д. Клиенты зачастую делятся на категории – VIP-клиент, обычный клиент, постоянный клиент, мелкооптовый клиент, и т.д. Товарные позиции могут комплектоваться и разукомплектовываться, многие товары подлежат обязательной сертификации и гигиеническим исследованиям, некондиционные позиции необходимо списывать, на складах периодически должна проводиться инвентаризация, каждая компания должна иметь свою маркетинговую политику и т.д., вообщем – современное торговое предприятие представляет живой организм, находящийся в постоянном движении.Очевидно, что вся эта кипучая деятельность требует автоматизации. Для решения этой задачи существуют специальные программные средства, и в этой книге мы познакомим вам с самым популярным продуктом, предназначенным для автоматизации деятельности торгового предприятия – «1С Управление торговлей», которое реализовано на новейшей технологической платформе версии 1С 8.2.

Алексей Анатольевич Гладкий

Финансы / Программирование, программы, базы данных