![]() |
![]() ![]() ![]() ![]() ![]() |
![]() |
Frequently Asked QuestionsBoost , The Boost C++ Libraries BoostBook Documentation Subset , Chapter 45. Boost.Build User Manual
|
![]() |
Note |
---|---|
Данная статья предназначена для систем Unix. |
Прежде чем ответить на вопросы, давайте вспомним несколько моментов об общих библиотеках. Общие библиотеки могут использоваться несколькими приложениями или другими библиотеками без физического включения библиотеки в приложение, что может значительно уменьшить общий размер приложения. Также возможно обновление общей библиотеки, когда приложение уже установлено.
Однако для запуска приложения в зависимости от общих библиотек ОС может потребоваться найти общую библиотеку при запуске приложения. Динамический линкер будет искать в системно определенном списке путей, загружать библиотеку и разрешать символы. Это означает, что вы должны либо изменить системно-определяемый список, приведенный переменной среды LD_LIBRARY_PATH
, либо установить библиотеки в системное местоположение. Это может быть неудобно при разработке, так как библиотеки еще не готовы к установке, а загромождение системных путей может быть нежелательным. К счастью, в Unix есть другой способ.
Исполняемый файл может включать в себя список дополнительных библиотечных путей, которые будут искаться перед системными путями. Это отлично подходит для разработки, потому что система сборки знает пути ко всем библиотекам и может включать их в исполняемые файлы. Это делается, когда функция hardcode-dll-paths
имеет значение true
, которое является значением по умолчанию. Когда исполняемые файлы должны быть установлены, история отличается.
Очевидно, что установленный исполняемый файл не должен содержать жестко закодированные пути к дереву разработки. (Правило install
явно отключает hardcode-dll-paths
Особенность по этой причине. Тем не менее, вы можете использовать функцию dll-path
для добавления явных путей вручную. Например:
install installed : application : <dll-path>/usr/lib/snake <location>/usr/bin ;
позволяет приложению находить библиотеки, размещенные в каталоге /usr/lib/snake
.
Если вы установите библиотеки в нестандартном месте и добавите явный путь, вы получите больше контроля над библиотеками, которые будут использоваться. Библиотека с таким же названием не будет использоваться случайно. Если вы установите библиотеки в системное местоположение и не добавите никаких путей, системный администратор будет иметь больше контроля. Каждая библиотека может быть индивидуально обновлена, и все приложения будут использовать новую библиотеку.
Какой подход лучше всего зависит от вашей ситуации. Если библиотеки относительно автономны и могут использоваться сторонними приложениями, они должны быть установлены в месте расположения системы. Если у вас есть много библиотек, которые могут быть использованы только вашим приложением, имеет смысл установить их в нестандартный каталог и добавить явный путь. Обратите внимание, что руководящие принципы для различных систем различаются в этом отношении. Например, руководящие принципы Debian GNU запрещают любые дополнительные пути поиска, в то время как руководящие принципы Solaris предполагают, что они всегда должны использоваться.
Желательно декларировать стандартные библиотеки, доступные в данной системе. Включение целевой декларации в Jamfile конкретного проекта не очень хорошо, так как расположение библиотек может варьироваться между различными машинами разработки, и тогда такие декларации должны быть дублированы в разных проектах. Решение состоит в том, чтобы объявить цели в Росте. Создайте файл конфигурации site-config.jam
:
project site-config ; lib zlib : : <name>z ;
Напомним, что и site-config.jam
, и user-config.jam
являются проектами, и все, что вы можете сделать в Jamfile, вы можете сделать и в этих файлах. Итак, вы объявляете идентификатор проекта и цель. Теперь можно написать:
exe hello : hello.cpp /site-config//zlib ;
в любом джемфиле.
В современном C++ библиотеки часто состоят только из файлов заголовка, без каких-либо исходных файлов для компиляции. Чтобы использовать такие библиотеки, вам нужно добавить соответствующие дополнения и, возможно, определения для вашего проекта. Но с большим количеством внешних библиотек становится проблематично запомнить, какие библиотеки являются заголовками, а какие вы должны ссылаться. Тем не менее, с Boost. Создать библиотеку только для заголовков можно как увеличить. Создайте целевую аудиторию, и все иждивенцы могут использовать такую библиотеку, не задумываясь о том, является ли она библиотекой только для заголовков или нет.
Библиотеки только для заголовков могут быть объявлены с использованием правила alias
, определяющего их путь включения в качестве части его требований к использованию, например:
alias my-lib : # no sources : # no build requirements : # no default build : <include>whatever ;
Включения, указанные в требованиях к использованию my-lib
, автоматически добавляются ко всем свойствам сборки иждивенцев. Иждивенцы не должны заботиться о том, является ли my-lib
заголовком или нет, и можно позже сделать my-lib
в обычную компилируемую библиотеку, не имея при этом деклараций своих иждивенцев.
Если у вас уже есть соответствующие требования к использованию, заявленные для проекта, в котором определена библиотека только для заголовков, вам не нужно дублировать их для alias
цель:
project my : usage-requirements <include>whatever ; alias mylib ;
Повышаю. Строительство - это название полной системы сборки. Исполняемый файл, который запускает его, является b2
. Этот исполняемый файл написан на C и реализует критически важные для производительности алгоритмы, такие как обход графа зависимостей и выполнение команд. Он также реализует интерпретируемый язык, используемый для реализации остальной части Boost. Построй. Этот исполняемый файл официально называется «Boost.Build Engine».
Начало. Двигатель сборки происходит от более раннего инструмента сборки под названием Perforce Jam. Первоначально были незначительные изменения, и имя файла было bjam
. Позже, с большим количеством изменений, сходство имен из-за плохого обслуживания пользователей, а также из-за повышения 1.47.0, официальное название исполняемого файла было изменено на b2
. Для совместимости по-прежнему создается копия с именем bjam
, но во всех случаях рекомендуется использовать новое имя.
Perforce Jam был важной основой, и мы с благодарностью признаем его влияние, но для пользователей сегодня эти инструменты разделяют только некоторые основы интерпретируемого языка.
Статья Frequently Asked Questions раздела The Boost C++ Libraries BoostBook Documentation Subset Chapter 45. Boost.Build User Manual может быть полезна для разработчиков на c++ и boost.
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.
:: Главная :: Chapter 45. Boost.Build User Manual ::
реклама |