2. В директории, где вы хотите создать исполняемый файл, создайте файл Jamroot.
3. В файле Jamroot вызовите правило exe, объявляющее целевой исполняемый файл. Укажите свои файлы .cpp и цели библиотек, от которых исполняемый файл зависит как от источников. Также, если требуется, добавьте свойства вида <include>путь
, чтобы сказать компилятору, где искать заголовочные файлы библиотек.
4. В файле Jamroot вызовите правило install
, определяющее в качестве требований свойства <install-dependencies>on
, <install-type>EXE
и <install-type>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
: # требования
<install-dependencies>on
<install-type>EXE
<install-type>SHARED_LIB
<location>.
;
Теперь введите:
> bjam hellobeatles
находясь в директории hellobeatles. В результате этого вначале будут собраны два проекта, от которых зависит цель hellobeatles, а затем будет собрана цель hellobeatles
. Наконец, введите:
> bjam dist
В результате исполняемый файл hellobeatles и динамическая библиотека georgeringo будут скопированы в директорию, содержащую файл hellobeatles.cpp.
Как было сказано в рецепте 1.5, прежде чем запускать hellobeatles, вы должны поместить копию рабочей библиотеки вашего инструментария в такое место, где операционная система сможет ее найти.
Цели библиотек, от которых зависит данная цель, указываются как источники с помощью записи path//target-name
. В рецептах 1.8 и 1.9 я показал, как объявлять цель для сборки библиотеки из исходного кода с помощью Boost.Build Однако если библиотека доступна в виде готового двоичного файла, вы можете объявить цель для нее следующим образом.
lib имя-цели
:
: <file>имя-файла
;
Как объяснялось в рецепте 1.7, большая часть основных целей соответствует не одному файлу, а набору связанных файлов, таких как отладочная и окончательная сборка исполняемого файла. Чтобы объявить цель для готовой библиотеки, у которой есть несколько вариантов, используйте следующую запись.
lib имя цели
:
: <file>имя-файла требования
;
lib имя-цели
: <file>другое-имя-файла другие-требования
;
Например, отладочный и окончательный варианты готовой библиотеки могут быть объявлены следующим образом.
lib cryptolib
:
: <file> ../libraries/cryptolib/cryptolib_debug.lib
<variant>debug
;
lib cryptolib
: <file> ../libraries/cryptolib/cryptolib.lib
<variant>release
;
Если готовая библиотека расположена в одной из директорий, в которых компоновщик выполняет поиск автоматически, как описано в рецепте 1.5, цель можно объявить следующим образом.
lib имя-цели
: <name>имя-библиотеки
;
Здесь имя-библиотеки
— это имя, которое должно быть передано компоновщику и которое может отличаться от реального имени файла, как обсуждалось в рецепте 1.5. Чтобы дать указание компоновщику искать в определенной директории, напишите
lib имя-цели
: <name>имя-библиотеки
<search>путь-к-библиотеке
;
Сложное приложение может требовать установки вместе с несколькими дополнительными исполняемыми файлами и динамическими библиотеками, от которых оно зависит. Вместо того чтобы указывать эти файлы по отдельности, используйте функцию install-dependencies
, которая позволяет вам указать только главный исполняемый файл и тип зависимостей, которые должны быть установлены. В примере 1.13 требование <install-dependencies>on
включает функцию install-dependencies
, а требования <install-type>EXE
и <install-type>SHARED_LIB
говорят BoostBuild установить все зависимости, которые являются исполняемыми файлами или динамическими библиотеками. Другие возможные значения функции install-type
включают LIB
и IMPORT_LIB
.
Все три Jam-файла, используемые при сборке исполняемого файла hellobeatles, называются Jamroot. Это хорошо для такого простого проекта, но обычно следует организовывать набор Jam-файлов в иерархию с единственным высшим Jam-файлом, определяющим корень проекта. Организация проектов подобным образом позволяет использовать некоторые из более сложных функций Boost.Build's, таких как наследование свойств дочерними проектами. Одним из способов сделать такую организацию в нашем случае является изменение имен Jam-файлов в директориях johnpaul, georgeringo и hellobeatles с Jamroot на Jamfile и добавление файла Jamroot со следующим содержимым в родительскую директорию.
# jamfile для примера приложения
build-project hellobeatles ;
Правило build-project
просто говорит bjam собрать данный проект, который может быть указан либо по пути, либо с помощью символьного идентификатора. Если вы перейдете в директорию, содержащую Jamroot, и запустите bjam, то будут собраны три дочерних проекта.
Рецепты 1.5, 1.13 и 1.18.
1.11. Сборка статической библиотеки с помощью IDE
Вы хотите использовать IDE для сборки статической библиотеки из набора исходных файлов С++, таких как перечисленные в примере 1.1.
Основная процедура выглядит следующим образом.