Чтение онлайн

на главную - закладки

Жанры

C++. Сборник рецептов

Когсуэлл Джефф

Шрифт:

Место, куда файлы должны быть скопированы, может указываться либо как имя цели, либо как значение свойства

location
требований цели. Например, в примере 1.8 можно написать цель
install
следующим образом.

install . : hello ;

Затем установка исполняемого файла выполняется так:

> bjam .

Однако метод, использованный в примере 1.8, предпочтителен, так как проще запомнить именованную цель, чем путь файла.

Наконец, давайте быстро взглянем на синтаксис командной строки bjam. Чтобы собрать цель

xxx
, используя инструментарий по умолчанию, введите команду:

> bjam xxx

Чтобы

собрать цель
xxx
, используя инструментарий
yyy
, введите команду:

> bjam xxx toolset=yyy

Чтобы собрать цель

xxx
, используя версию
vvv
инструментария
yyy
, введите команду:

> bjam хххtoolset=yyy-vvv

Чтобы в командной строке указать использовать при сборке стандартную библиотеку

zzz
, используйте синтаксис:

> bjam xxx stdlib=zzz

Чтобы собрать несколько целей одновременно, введите в командной строке несколько имен целей, а чтобы собрать все цели данного проекта, не указывайте целей. Следовательно, чтобы собрать и установить исполняемый файл из примера 1.9, просто введите:

> bjam

Чтобы удалить все файлы, созданные в процессе сборки, включая исполняемый файл, введите:

> bjam --clean

Свойство в виде

<функция>значение
может быть указано в командной строке как
функция=значение
.

Смотри также

Рецепты 1.2 и 1.15.

1.8. Сборка статической библиотеки с помощью Boost.Build

Проблема

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

Решение

В директории, где вы хотите создать статическую библиотеку, создайте файл Jamroot. В файле Jamroot вызовите правило

lib
, объявляющее целевую библиотеку, указав в качестве исходных файлов свои файлы .cpp и используя в качестве требования свойство
<link>static
. Чтобы указать директорию поиска заголовочных файлов библиотеки, т. е. директорию, относительно которой должны разрешаться директивы
include
для заголовочных файлов этой библиотеки, добавьте требование к использованию в виде
<include>путь
. Чтобы указать компилятору, где искать включенные заголовки, может потребоваться использовать несколько директив вида
<include>путь
. Наконец, в директории, содержащей Jamroot, запустите bjam, как описано в рецепте 1.7.

Например, чтобы собрать статическую библиотеку из исходных файлов, перечисленных в примере 1.1, ваш Jamroot может выглядеть как в примере 1.11.

Пример 1.11. Jam файл для сборки статической библиотеки libjohnpaul.lib или libjohnpaul.a

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

lib libjohnpaul

: # исходники

john.cpp paul.cpp johnpaul.cpp

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

<link>static

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

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

<include>..

;

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

> bjam libjohnpaul

Обсуждение

Правило

lib
используется для объявления цели, представляющей статическую или динамическую библиотеку. Как показано в примере 1.9, оно имеет такой же вид, что и правило exe. Использование требования
<include>..
освобождает проект, который зависит от вашей библиотеки, от необходимости явно указывать в своих требованиях директорию заголовочных файлов вашей библиотеки. Требование
<link>static
указывает, что ваша цель должна всегда собираться как статическая библиотека. Если вы хотите сохранить возможность сборки целевой библиотеки как статической и как динамической, опустите требование
<link>static
. Должна ли библиотека собираться как статическая или как динамическая, может быть указано в командной строке или в требованиях цели, которая зависит от целевой библиотеки. Например, если в примере 1.11 требование
<link>static
опустить, то чтобы собрать цель
libjohnpaul
как статическую библиотеку, потребуется ввести команду:

> bjam libjohnpaul link=static

Однако написание исходного кода для библиотеки, которая может быть собрана и как статическая, и как динамическая, является нетривиальной задачей, что показано в рецепте 1.9.

Смотри также

Рецепты 1.3, 1.11 и 1.16.

1.9. Сборка динамической библиотеки с помощью Boost.Build

Проблема

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

Решение

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

lib
, объявляющее целевую библиотеку, указав в качестве исходных файлов свои файлы .cpp и используя в качестве требования свойство
<link>shared
. Чтобы указать директорию поиска заголовочных файлов библиотеки, т.е. директорию, относительно которой должны разрешаться директивы
include
для заголовочных файлов этой библиотеки, добавьте требование к использованию в виде
<include>путь
. Если исходные файлы включают заголовки от других библиотек, то чтобы сказать компилятору, где искать заголовочные файлы, вам может потребоваться добавить несколько требований в виде
<include>путь
. Чтобы гарантировать, что символы вашей динамической библиотеки будут экспортированы в Windows с помощью директивы
__declspec(dllexport)
, вам также может потребоваться добавить одно или несколько требований в виде
<define>символ
. Наконец, в директории, содержащей 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

Поделиться:
Популярные книги

Назад в СССР 5

Дамиров Рафаэль
5. Курсант
Фантастика:
попаданцы
альтернативная история
6.64
рейтинг книги
Назад в СССР 5

Убивать чтобы жить 9

Бор Жорж
9. УЧЖ
Фантастика:
героическая фантастика
боевая фантастика
рпг
5.00
рейтинг книги
Убивать чтобы жить 9

Аргумент барона Бронина 3

Ковальчук Олег Валентинович
3. Аргумент барона Бронина
Фантастика:
попаданцы
аниме
сказочная фантастика
фэнтези
5.00
рейтинг книги
Аргумент барона Бронина 3

Затерянные земли или Великий Поход

Михайлов Дем Алексеевич
8. Господство клана Неспящих
Фантастика:
фэнтези
рпг
7.89
рейтинг книги
Затерянные земли или Великий Поход

Кодекс Крови. Книга ХI

Борзых М.
11. РОС: Кодекс Крови
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Кодекс Крови. Книга ХI

Орден Багровой бури. Книга 1

Ермоленков Алексей
1. Орден Багровой бури
Фантастика:
попаданцы
аниме
фэнтези
фантастика: прочее
5.00
рейтинг книги
Орден Багровой бури. Книга 1

Идеальный мир для Лекаря 25

Сапфир Олег
25. Лекарь
Фантастика:
фэнтези
юмористическое фэнтези
аниме
5.00
рейтинг книги
Идеальный мир для Лекаря 25

Отмороженный

Гарцевич Евгений Александрович
1. Отмороженный
Фантастика:
боевая фантастика
рпг
5.00
рейтинг книги
Отмороженный

Законы Рода. Том 10

Flow Ascold
10. Граф Берестьев
Фантастика:
юмористическая фантастика
аниме
фэнтези
5.00
рейтинг книги
Законы Рода. Том 10

Имя нам Легион. Том 2

Дорничев Дмитрий
2. Меж двух миров
Фантастика:
боевая фантастика
рпг
аниме
5.00
рейтинг книги
Имя нам Легион. Том 2

Возрождение Феникса. Том 2

Володин Григорий Григорьевич
2. Возрождение Феникса
Фантастика:
фэнтези
попаданцы
альтернативная история
6.92
рейтинг книги
Возрождение Феникса. Том 2

Убивать чтобы жить 5

Бор Жорж
5. УЧЖ
Фантастика:
боевая фантастика
космическая фантастика
рпг
5.00
рейтинг книги
Убивать чтобы жить 5

Безумный Макс. Ротмистр Империи

Ланцов Михаил Алексеевич
2. Безумный Макс
Фантастика:
героическая фантастика
альтернативная история
4.67
рейтинг книги
Безумный Макс. Ротмистр Империи

Санек 2

Седой Василий
2. Санек
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Санек 2