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

ЖАНРЫ

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

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

Шрифт:

Некоторые часто используемые функции и их возможные значения перечислены в табл. 1.15.

Табл. 1.15. Часто используемые функции Boost.Build

Функция Значение Эффект
include Path Определяет путь для поиска заголовочных файлов
define name=[value] Определяет макрос
threading
multi
или
single
Включает или отключает поддержку потоков
runtime-link
static
или
shared
Определяет тип компоновки с библиотекой времени выполнения¹
variant
debug
или
release
Запрашивает отладочную или окончательную сборку

¹ См. рецепт 1.23.

Когда собирается целевой исполняемый файл, или цель, соответствующая статической или динамической библиотеке, файл, соответствующий этой цели, создается в директории, дочерней по отношению к директории, содержащей Jam-файл. Относительным путь этой директории зависит от инструментария и конфигурации сборки, но он всегда начинается с bin. Например, исполняемый файл из примера 1.8 может быть создан в директории bin/msvc/debug.

Для простоты я попросил вас создать Jam-файл из примера 1.8 в той же директории, в которой находится исходный файл hello.cpp. Однако в реальных проектах вам часто придется хранить исходные и двоичные файлы в различных директориях. В примере 1.8 Jam-файл можно поместить в любое место при условии, что вы укажете путь hello.cpp так, что он будет указывать на реальный файл hello.cpp.

Правило

install
указывает Boost.Build скопировать один или несколько файлов, указанных как имена файлов или как имена главных целей, в указанное место. Вызов этого правила имеет вид, показанный в примере 1.10.

Пример 1.10. Вызов правила install

install имя-цели

 : файлы

 : требования

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

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

 ;

Здесь

имя-цели
— это имя объявляемой цели, а
файлы
— это список из одного или более файлов или целей, которые требуется скопировать. Остальные аргументы —
требования
,
сборка-по-умолчанию
и
требования-к-использованию
— имеют такие же значения, как и в примере 1.9.

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

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
как статическую библиотеку, потребуется ввести команду:

Поделиться с друзьями: