Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
Разработка программного обеспечения

Boost.Build tutorial

Boost , ,

Boost C++ Libraries

...one of the most highly regarded and expertly designed C++ library projects in the world. Herb Sutter and Andrei Alexandrescu, C++ Coding Standards

Boost.Build Tutorial

Написано Борисом Шелингом.


Introduction
Compiler- and platform-independent build system

Повышаю. Build - это высокоуровневая система сборки, которая позволяет максимально легко управлять проектами на C++. Идея состоит в том, чтобы указать в конфигурационных файлах столько, сколько необходимо для создания программы. Например, не обязательно сообщать о росте. Как использовать определенный компилятор. Повышаю. Build поддерживает множество компиляторов и умеет ими пользоваться. Если вы создаете файл конфигурации, вам просто нужно сообщить Boost. Постройте, где найти исходные файлы, как должен называться исполняемый файл и какой компилятор увеличить. Постройка должна использоваться. Повышаю. Затем Build попытается найти компилятор и автоматически создать программу.

Как Буст. Build поддерживает множество конфигурационных файлов компиляторов, которые никогда не содержат никаких опций для компиляторов. Конфигурационные файлы полностью не зависят от компилятора. Конечно, можно установить параметры, например, следует ли оптимизировать код. Однако эти варианты написаны на языке, понятном только Boost. Построй. Как только компилятор выбран для создания программы Boost. Build переводит параметры в конфигурационных файлах в параметры командной строки, ожидаемые выбранным компилятором. Это позволяет писать конфигурационные файлы один раз и создавать программу на разных платформах с разными компиляторами.

Как бы хорошо это не звучало. Строить можно только для C++ и C проектов. Повышаю. Build не знает, как использовать другие компиляторы, такие как компилятор Java. Несмотря на рост. Build является расширяемой системой, поэтому имеет смысл использовать другую систему сборки для программ, реализованных на других языках программирования.

Повышаю. Build был создан для создания и установки библиотекBoost C++.Легко с различными компиляторами на разных платформах. Несмотря на рост. Build является частью и поставляется с библиотеками Boost C++, которые могут использоваться отдельно для любого проекта C++ или C. Можно дажескачать только Boost. Создайте, если вы не хотите использовать библиотеки Boost C++.

Эта статья является введением, чтобы помочь вам использовать Boost. Создайте свой собственный C++ или C-проект. Это дает вам базовое понимание того, как повысить. Постройте работу и как вы начнете ее использовать. После прочтения статьи вы не только сможете использовать Boost. Создавайте свои собственные проекты, это также будет легче понять. Постройте документацию, как вы узнаете общую картину.


Build process
Jamfiles and an interpreter called b2

Программа, которую вы используете для создания проекта под управлением Boost. Строительство называетсяb2. Если вы загрузили и создали библиотеки Boost C++, вы уже использовалиb2.b2ищет конфигурационные файлы, читает их и соответственно строит проект. Он также принимает различные варианты командной строки, которые могут быть полезны, например, для отображения всех команд, выполняемыхb2для построения проекта.

Проекты могут быть большими и состоять из множества компонентов, исходный код которых распределен по многим каталогам. Вместо создания одного большого файла конфигурации для всех компонентов проекта обычно получают свои собственные файлы конфигурации. Это ничем не отличается от Boost. В большом проекте будет много конфигурационных файлов, которые должны быть найдены и интерпретированыb2.

Для Буста. Создать каждый каталог с конфигурационным файлом — это проект: Если в каталоге есть файл конфигурации, что-то может быть построено. Будь то компонент в подкаталоге или программное обеспечение, состоящее из многих компонентов, не имеет значения для Boost. Построй.

При запускеb2не выполняется поиск конфигурационных файлов по всей файловой системе. Он ищет файл конфигурации только в текущем рабочем каталоге. Если он не находит конфигурационный файл, он ничего не делает.b2не осуществляет поиск файлов конфигурации в любом другом каталоге, если в текущем рабочем каталоге нет файла конфигурации.

Конфигурационный файлb2называется<Jamfile.jam>. Файлы с расширением<jam>называются Jamfiles. Еслиb2находит Jamfile в текущем рабочем каталоге, он ищет больше Jamfiles в родительских каталогах.b2поднимается вверх по родительским каталогам, пока не находит файл конфигурации под названием<Jamroot.jam>.<Jamroot.jam>ничем не отличается от<Jamfile.jam>. Это только указывает на то, чтоb2не нужно смотреть дальше.

Причина, по которойb2ищет Jamfiles в родительских каталогах, заключается в том, что это позволяет группировать настройки. Если есть некоторые компоненты, которые должны быть построены с аналогичными настройками, они могут храниться в Jamfile в родительском каталоге, который будет автоматически использоваться, если компонент в подкаталоге построен.

Обратите внимание, чтоb2должен найти файл под названием<Jamroot.jam>. Это ошибка, если нет<Jamroot.jam>. Если<Jamroot.jam>находится в текущем рабочем каталоге, то не требуется никакого другого файла<Jamfile.jam>. Если<Jamroot.jam>находится в родительском каталоге, файл<Jamfile.jam>должен существовать в текущем рабочем каталоге - в противном случаеb2ничего не делает.

Если вы скопируетеb2в каталог, который не содержит Jamfiles, и запустите программу, вы получите сообщение об ошибке. Однакоb2не жалуется на то, что не может найти Джамфила. Он жалуется на то, что не нашел систему сборки.

Unable to load Boost.Build: could not find "boost-build.jam"
---------------------------------------------------------------
Attempted search from C:\Users\Boris\Desktop up to the root
Please consult the documentation at 'http://www.boost.org'.

Первое, что делаетb2, — это не поиск Джамфила, а загрузка системы сборки. Но что именно представляет собой система сборки?

b2является переводчиком. Он действительно не знает, как что-то построить. Чтоb2делает, так это интерпретирует Джамфилов. Повышаю. Постройка действительно реализуется в Jamfiles. И они содержат всю логику, которая способствует росту. Создайте такой мощный инструмент. Какb2только то, что он читает в Jamfiles, он должен знать, где найти Jamfiles Boost. Строится из.

Когдаb2запущен, он ищет файл<boost-build.jam>в текущем рабочем каталоге. Если он не находит файл, он ищет все родительские каталоги. Этот файл должен содержать только одну строку, чтобы сказатьb2, где найти систему сборки.

boost-build C:/boost_1_57_0/tools/build/src ; 

Путь после<boost-build>должен относиться к каталогу, который содержит файл под названием<bootstrap.jam>. Это файлb2для загрузки системы сборки. Как и библиотеки Boost C++, Boost. Вы можете обратиться к подкаталогу<tools/build>корневого каталога библиотек Boost C++. И вы всегда можете использовать слэш в качестве разделителя пути, даже если вы находитесь в Windows.

Обратите внимание, что в конце линии должно быть пространство между дорожкой и полуколоном. Это ошибка, если пространство отсутствует. Вы узнаете больше о синтаксисе, используемом в Jamfiles, в этой статье.

Еслиb2находит<boost-build.jam>, он использует путь внутри файла для загрузки системы сборки. Когда система сборки загружается, она также готовится к использованию определенного компилятора, линкера и, возможно, других инструментов, необходимых для создания проекта. Повышаю. Build относится к этим программам как набор инструментов. Если опция командной строки не используется для запускаb2, система сборки пытается найти набор инструментов, который она может использовать автоматически. Например, в Windows он ищет Visual C++. И если он обнаруживает, что Visual C++ установлен, он использует набор инструментов msvc.

warning: No toolsets are configured.
warning: Configuring default toolset "msvc".
warning: If the default is wrong, your build may not work correctly.
warning: Use the "toolset=xxxxx" option to override our guess.
warning: For more configuration options, please consult
warning: http://boost.org/boost-build2/doc/html/bbv2/advanced/configuration.html

Если вы начнетеb2без указания того, какой набор инструментов следует использовать, вы увидите предупреждение.b2сообщает вам, какой набор инструментов он обнаружил и решил использовать. Если вы хотите подавить предупреждение, вы должны указать набор инструментов самостоятельно. Например, вы говорите системе сборки использовать Visual C++ снабором инструментов b2=msvc. Если вы хотите использовать GCC, вы вводитенабор инструментов b2 = gcc.

На сегодняшний день поддерживается более 10 наборов инструментов. Есть хороший шанс, что рост. Build будет работать с компилятором, который вы используете из коробки.

Как только система сборки была найдена, загружена и знает, какой набор инструментов использовать - либо потому, что вы указали один, либо система сборки обнаружила один автоматически -b2ищет файл<Jamfile.jam>в текущем рабочем каталоге. Если он не найдет Jamfile, сообщение об ошибке будет напечатано.

error: error: no Jamfile in current directory found, and no target references specified.

Если вы создаете пустой файл<Jamfile.jam>и начинаетеb2, снова печатается другое сообщение об ошибке.

error: Could not find parent for project at '.'
error: Did not find Jamfile.jam or Jamroot.jam in any parent directory.

b2в конечном счете ищет Джамфила под названием<Jamroot.jam>. Если он не существует в текущей рабочей директорииb2ожидает найти его в родительской директории.

Если вы создадите пустой файл<Jamroot.jam>и запуститеb2, сообщение об ошибке исчезнет. Очевидно, что Boost ничего не сделал. Построй. Но теперь вы знаете, какb2продолжает строить программу и каков минимальный рост. Конфигурация здания выглядит так.

Обратите внимание, что если вы работаете над небольшим проектом и вам нужен только один файл конфигурации, вы можете просто назвать его<Jamroot.jam>. Вам не нужен другой файл под названием<Jamfile.jam>.


Basic tasks
Rules and features

Если вы посмотрите на Jamfiles, синтаксис может напомнить вам о конфигурационных файлах, используемых другими системами сборки. Простые Jamfiles могут выглядеть как обычные старые конфигурационные файлы, где, например, значения, как представляется, присваиваются ключам. Важно понимать, что Jamfiles на самом деле являются скриптовыми файлами. Существует язык программирования, используемый для написания Jamfiles.b2не является основным компонентом Boost. Постройте, кто знает, как создавать программы. Логика роста. Постройте в Jamfiles, которые говорятb2, как строить программы.

Несмотря на рост. Build основан на языке программирования, о котором вам не нужно думать при создании Jamfiles. Синтаксис языка программирования, используемого Boost. Build пытается напомнить вам больше о создании простых старых конфигурационных файлов. Идея состоит в том, чтобы иметь лучшее из двух миров: Мощный и гибкий язык программирования, но простой синтаксис, с которым вы можете быть знакомы из других систем сборки.

Эта статья не вводит вас в язык программирования Boost. Строительство основано на Язык программирования является проприетарным и не очень удобным в использовании. Он не является конкурентом популярным языкам сценариев, таким как Javascript или Python. Разработчики Boost. Постройте его и работайте над другой версией Boost. Создание на основе Python. Однако все это не должно иметь значения для разработчиков, которые планируют управлять своими проектами с Boost. Построй. Это помогает лучше понять синтаксис Jamfiles, когда понимаешь, что в Boost есть язык программирования. Построй. Но не обязательно изучать детали языка программирования.

Давайте рассмотрим простой Jamfile, который можно использовать для создания исполняемого файлаHelloиз исходного файла<hello.cpp>.

exe hello : hello.cpp ; 

Повышаю. Постройка обеспечивает множество встроенных правил и<exe>является одним из них. При этом документация Boost. Build относится к<exe>, как правило, вы уже знаете, что вышеупомянутый Jamfile фактически построен с использованием языка программирования. Как оказалось, правила — это просто функции. И Джамфил выше содержит вызов функции.

Для большинства задач, которые, как правило, требуются для создания программ Boost. Build предоставляет заранее определенные правила или функции, если хотите. Как и в других языках программирования, можно передавать параметры. В Джамфиле выше функция<exe>называется с двумя параметрами hello и hello.cpp.

Язык программирования повышается. В основе сборки лежит знание только одного типа данных: Все есть список струн. Список может быть пустым или содержать одну или несколько строк. В Джамфиле выше функция<exe>называется с двумя параметрами каждый список, содержащий одну строку.

exe "hello" : "hello.cpp" ; 

Можно использовать цитаты. Это не обязательно, так как каждый элемент в списке имеет строку типа данных. Цитаты используются только в том случае, если параметры содержат пробелы.

Хотя между правилом и первым параметром нет специального разграничителя, для разделения других параметров необходимо использовать толстую кишку. Также необходимо закончить строку с запятой, как вы привыкли к C++.

Обратите внимание, что язык программирования Boost. Строительство требует, чтобы вокруг всех токенов было пространство. Например, должно быть пространство слева и справа от толстой кишки, а слева от полуколона должно быть пространство. Без пробелов вокруг токеновb2не сможет правильно разобрать Jamfiles.

Еслиb2запускается в каталоге, содержащем вышеупомянутый Jamfile и исходный файл<hello.cpp>, и если набор инструментов msvc используется в Windows, создается подкаталог<bin\msvc-9.0\debug>для создания исполняемого файла<hello.exe>.

...found 9 targets...
...updating 5 targets...
common.mkdir bin
common.mkdir bin\msvc-9.0
common.mkdir bin\msvc-9.0\debug
compile-c-c++ bin\msvc-9.0\debug\hello.obj
hello.cpp
msvc.link bin\msvc-9.0\debug\hello.exe
msvc.manifest bin\msvc-9.0\debug\hello.exe
...updated 5 targets...

Как видите, для создания исполняемого файла из исходного файла требуется только одна строка в Jamfile. И если программа построена на Windows, есть даже правильное расширение файла<exe>.

Главное преимущество Boost. Build - это то, что вы указываете столько, сколько необходимо для системы сборки, чтобы знать, как построить программу. Всё, что угодно. Строить можно автоматически, это делается автоматически. Вам не нужно обнаруживать платформу, на которой построена программа, чтобы решить, следует ли добавлять расширение файла<exe>или нет. И вам не нужно указывать, как компилятор, такой как Visual C++, на самом деле должен быть вызван для компиляции исходного кода.

Повышаю. Build поддерживает множество инструментов из коробки. Как программу можно построить с помощью различных наборов инструментов Boost. Build использует специализированные каталоги. Таким образом, можно создать программу с различными наборами инструментов без набора инструментов, постоянно перезаписывая файлы, созданные другим набором инструментов.

Существуют не только каталоги для набора инструментов, но и каталоги для конкретных вариантов. Вариант - это отладочная или релизная версия программы. Для каждого варианта используется другой каталог для построения программы — опять же по причине не перезаписи файлов, созданных другим вариантом. По умолчанию используется вариант отладки. Именно поэтому был создан подкаталог<bin\msvc-9.0\debug>. Если вы хотите создать версию релиза, вы можете указать вариант в командной строке свариантом b2 = выпускили, что еще проще,выпуском b2.

...found 9 targets...
...updating 5 targets...
common.mkdir bin
common.mkdir bin\msvc-9.0
common.mkdir bin\msvc-9.0\release
compile-c-c++ bin\msvc-9.0\release\hello.obj
hello.cpp
msvc.link bin\msvc-9.0\release\hello.exe
msvc.manifest bin\msvc-9.0\release\hello.exe
...updated 5 targets...

С вариантом набора для выпуска подкаталог<bin\msvc-9.0\release>используется для создания исполняемого<hello.exe>.

Выбор варианта происходит так часто, что достаточно ввестиb2. Повышаю. Build выясняет, что релиз предназначен для выбора варианта.

Если вы не хотите указывать вариант в командной строке, но хотите создавать версии релиза<hello.exe>по умолчанию, Jamfile должен быть изменен.

exe hello : hello.cpp : <variant>release ; 

Правило<exe>(или, если хотите, функция) принимает несколько дополнительных параметров. Третий параметр – это перечень требований. Вы можете подумать о вариантах командной строки, которые всегда устанавливаются и передаются командам для создания исполняемого файла.

Для того, чтобы заставить версию выпуска быть построенной, вариант должен быть настроен на выпуск так же, как это было сделано ранее в командной строке. Синтаксис для установки варианта в Jamfile отличается.

Повышаю. Build определяет функции, которые выглядят как теги XML. Одна из функций, поддерживаемых Boost. Строить<<variant>>. Если функция должна быть установлена на значение, ее нужно поставить рядом с ней - без пробела между ними. Некоторые функции бесплатны, что означает, что они могут быть установлены на любую ценность, которую вы хотите.<<variant>>является несвободной функцией, так как она может быть установлена только для отладки или выпуска. Никакая другая ценность не допускается. Если будет установлено другое значение<b2>, будет сообщено об ошибке.

Если вы запустите<b2 variant=debug>и попытаетесь создать версию отладки<hello.exe>, она не будет работать, поскольку Jamfile содержит требование, что<hello.exe>построен как версия релиза. Если вы хотите перезаписать функцию в командной строке, вы должны передать функцию в качестве четвертого параметра вместо третьего.

exe hello : hello.cpp : : <variant>release ; 

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

Если вы хотите, чтобы как отладка, так и версия<hello.exe>выпуска была построена по умолчанию, функция<<variant>>должна быть установлена дважды для отладки и выпуска.

exe hello : hello.cpp : : <variant>debug <variant>release ; 

Важно, чтобы<<variant>>был установлен дважды в четвертом параметре, где указаны значения по умолчанию. Если бы это был третий параметр, в котором указаны требованияb2, то он сообщал бы об ошибке. В требованиях можно установить функцию несколько раз, но только если значения не являются взаимоисключающими. Поскольку программа не может быть отладкой, и версия релиза одновременно<<variant>>должна быть установлена в значениях по умолчанию. Только тогда поднимись. Постройка понимает, что должны быть построены две версии<hello.exe>.

exe hello : hello.cpp : <define>WIN32 <define>_WIN32 : <variant>debug <variant>release ; 

Вышеупомянутый Jamfile является примером для установки функции несколько раз в требованиях. Функция<<define>>используется для определения директив препроцессора. Нетрудно определить несколько директив препроцессора. Таким образом, теперь существуют две версии<hello.exe>, построенные как с двумя директивами<WIN32>, так и<_WIN32>.

exe hello : hello.cpp : : <variant>debug <variant>release <define>WIN32 <define>_WIN32 ; 

Если определения перемещаются на четвертый параметр и вы выполняетеb2, вы получаете те же две версии<hello.exe>, построенные с двумя директивами<WIN32>и<_WIN32>. Поскольку<<define>>не ожидает взаимоисключающих значений, не существует другого набора исполняемых файлов. Единственная разница между этим Jamfile и предыдущим заключается в том, что директивы, принятые в четвертом параметре, являются значениями по умолчанию, которые могут быть сброшены, в то время как все, что прошло в качестве третьего параметра, является неизменным требованием.

Вот еще один пример характеристики, ценности которой являются взаимоисключающими.

exe hello : hello.cpp : : <variant>debug <variant>release <optimization>speed <optimization>off ; 

b2создает четыре версии<hello.exe>: Версия отладки, оптимизированная для скорости, версия отладки без оптимизации, версия выпуска, оптимизированная для скорости, и версия выпуска без оптимизации. Все эти версии построены в отдельных каталогах, которые создаются автоматически.

До сих пор единственным правилом было<exe>. Но, конечно, рост. Build предлагает гораздо больше встроенных правил. Другое важное правило —<lib>. Используется для создания библиотеки.

lib world : world.cpp ; 

Вышеупомянутый Jamfile создает общую библиотеку из исходного файла<world.cpp>. В Windows создается файл<world.dll>. Обычное расширение файла автоматически добавляется Boost. Построй.

По умолчанию создается общая библиотека. Если вы хотите создать статическую библиотеку, вы установите функцию<<link>>в статическую.

lib world : world.cpp : <link>static ; 

Еще одно полезное правило<install>. После создания исполняемых файлов и библиотек это правило можно использовать для их установки.

exe hello : hello.cpp ; 
install "C:/Program Files/hello" : hello ; 

Приведенный выше Jamfile устанавливает исполняемый файл<hello.exe>в каталог<C:\Program Files\hello>. Второй параметр «привет» — это ссылка на целевой «привет», определенный в первой строке. Обратите внимание, что путь должен быть помещен в кавычки, поскольку он содержит пространство.

Здесь концепции, известные из других систем сборки, просвечивают: Вместо того, чтобы думать о функциях, каждая строка определяет цель. Зависимости создаются путем ссылки на другие цели. Вот как это делается. Постройка знает, в каком порядке она должна строить цели.

Правило<install>обычно пишется по-разному. Вместо прохождения каталога установки в качестве первого параметра используется функция<<location>>для установки каталога установки в третьем параметре.

exe hello : hello.cpp ; 
install install-bin : hello : <location>"C:/Program Files/hello" ; 

Основная причина, по которой лучше использовать<<location>>, заключается в том, что первый параметр всегда определяет цель. Другие правила могут относиться к цели. Вот почему рекомендуется использовать целевые имена, которые не нужно менять позже. Представьте, что программа должна быть установлена в другой каталог. Легче изменить каталог установки, если функция<<location>>не была использована в качестве каких-либо других правил, которые могут относиться к установочному блоку.

Есть еще одна причина, почему имеет смысл использовать функцию. Повышаю. Build поддерживает условные свойства, которые позволяют использовать различные каталоги установки в зависимости от платформы, на которой построена программа.

exe hello : hello.cpp ; 
install install-bin : hello : <target-os>windows:<location>"C:/Program Files/hello" <target-os>linux:<location>/usr/local/bin ; 

Особенность<<target-os>>— еще одна особенность с взаимоисключающими значениями. Он может быть установлен, например, на окна или Linux, но не на оба.

<<location>>следует<<target-os>>, ограниченный только толстой кистью. Такая конструкция называется условным свойством: Boost. Build выбирает каталог установки в зависимости от операционной системы.

Конечно, условные свойства можно использовать и с другими правилами. Например, можно определить различные директивы препроцессора в зависимости от варианта при создании программы или библиотеки.

Повышаю. Build предлагает гораздо больше встроенных правил. Еще одним полезным правилом является<glob>, которое позволяет использовать карты. В большом проекте с большим количеством исходных файлов не требуется перечислять их все по одному, а ссылаться на них<glob>.

exe hello : [ glob *.cpp ] ; 

Вышеупомянутый Jamfile содержит вложенный вызов функции: Результат правила<glob>передается в качестве второго параметра<exe>. Из-за требований языка программирования Boost. Сборка на основе скобок должна использоваться для вложенных вызовов функций.


Project management
Multiple Jamfiles

В крупных проектах с большим количеством Jamfiles необходимо как-то соединить Jamfiles. Обычно в корневом каталоге проекта имеется файл<Jamroot.jam>и много<Jamfile.jam>файлов в подкаталогах. Еслиb2запускается в корневом каталоге, разработчики, вероятно, ожидают, что весь проект, включая все компоненты в подкаталогах, построен. Посколькуb2ищет Jamfiles в родительских каталогах, но не в подкаталогах, Jamfiles должны явно ссылаться на Jamfiles в подкаталогах.

build-project hello ; 

Если Jamfile выглядит как образец выше, это относится к Jamfile в подкаталоге<hello>.<build-project>является правилом, которое ожидает путь в качестве единственного параметра. Затем путь используется для поиска джемфила.

build-project hello ; 
build-project world ; 

Если вы хотите построить несколько проектов, вы должны использовать<build-project>несколько раз.

Помимо ссылки на Jamfiles в подкаталогах, имеет смысл также группировать варианты, которые должны использоваться при создании компонентов в проекте.

project : default-build release ; 
build-project hello ; 
build-project world ; 

Правило<project>принимает различные параметры для установки опций для Jamfile в текущем рабочем каталоге и подкаталогах.

В то время как другие правила, такие как<exe>и<lib>, ожидают, что параметры будут переданы в определенном порядке<project>, используют названные аргументы. В образце выше название аргумента является по умолчанию-строитель. Вот почему можно передать значение высвобождения в совершенно другом параметре.

project : : : : : : : : : default-build release ; 
build-project hello ; 
build-project world ; 

Не имеет смысла передавать высвобождение в качестве десятого параметра. Но это работает, поскольку<project>не заботится о заказе. Так как десятый параметр называется по умолчанию, он принимается.

<project>поддерживает только несколько названных аргументов. Еще одно требование, которое может быть использовано для установки опций, которые не могут быть перезаписаны.

project : requirements <variant>release ; 
build-project hello ; 
build-project world ; 

Jamfile выше создает только релизные версии. Больше невозможно создать версию отладки, так как требования не могут быть перезаписаны. В этом разница с названным аргументом, называемым строительством по умолчанию, который использовался в предыдущей выборке: Его можно переписать.

При этом<build-project>увеличивается. Build предполагает, что параметр является ссылкой на подкаталог. Раньше мы видели другой тип ссылок.

exe hello : hello.cpp ; 
install install-bin : hello : <location>"C:/Program Files/hello" ; 

В вышеупомянутом Jamfile правило<install>относится к целевому приветствию, определенному в первой строке.

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

install install-bin : subdir//hello : <location>"C:/Program Files/hello" ; 

Теперь правило<install>относится к целевому приветствию в подкаталоге<subdir>.

Предположим, что исполняемый файлhelloзависит от библиотеки в другом каталоге<world>. Библиотека также построена с помощью Boost. Постройте по правилу<lib>.

lib world : world.cpp ; 

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

exe hello : hello.cpp world : : <variant>debug <variant>release ; 

Вышеприведенный Jamfile предполагает, что библиотека и ее Jamfile находятся в подкаталоге<world>.

При построении исполняемого файла генерируются две версии — отладка и версия выпуска. Однако в библиотеке не установлена функция<<variant>>. Но поднимись. Build предполагает, что он также должен построить две версии библиотеки. Об этом сообщает<<variant>>.

Распространяемые функции упрощают управление проектами, так как вам не нужно устанавливать одни и те же функции в различных Jamfiles. Однако это также усложняет понимание того, как создаются компоненты, поскольку все зависит от того, какие функции распространяются. Можно предположить, что рост. Постройка знает, что она должна делать. Но, конечно, это не значит, что вы легко понимаете, что он делает.

Рассмотрим еще один пример с использованием функции<<define>>.

exe hello : hello.cpp world : <define>WIN32 : <variant>debug <variant>release ; 

Приведенный выше Jamfile определяет директиву препроцессора<WIN32>для программыHello. Но будет ли<WIN32>определено и для библиотеки?

Это не так, как<<define>>не является распространяющейся особенностью. Если вам интересно, как вы должны знать: Единственный способ узнать, какие функции распространяются, это искать документацию.

Если вы установили библиотеки Boost C++, вы, вероятно, захотите связать некоторые из них. Вы каким-то образом должны добавить зависимость от соответствующей библиотеки Boost C++ к Jamfile вашего проекта. Если вы не удалили каталоги, в которых были удалены исходные файлы библиотек Boost C++, вы можете обратиться к цели в Jamfile в корневом каталоге.

exe hello : hello.cpp world C:/boost_1_39_0//filesystem/ ; 

Теперьздравствуйтетакже зависит от Роста. Библиотека файловых систем. Поскольку целевая файловая система определена в Jamfile в корневом каталоге библиотек Boost C++, на нее может ссылаться правило<exe>. Мало того, что соответствующие библиотеки Boost C++ будут связаны - каталог включения также передается компилятору, чтобы найти файлы заголовка. Если<hello.cpp>содержит<boost/filesystem.hpp>заголовок файла будет найден.

В вышеупомянутом Jamfile путь к корневому каталогу библиотек Boost C++ жестко закодирован. Каким-то образомb2нужно знать, где найти библиотеки Boost C++. Но было бы лучше, если бы путь был жестко закодирован только один раз, если несколько компонентов в проекте должны быть связаны с некоторыми библиотеками Boost C++.

project : requirements <variant>release ; 
use-project /boost : C:/boost_1_39_0 ; 
build-project hello ; 
build-project world ; 

Правило<use-project>используется для определения псевдонима Jamfile в другом каталоге. Jamfiles в подкаталогах используют псевдоним для ссылки на библиотеку Boost C++.

exe hello : hello.cpp world /boost//filesystem ; 

b2вычисляет, что<hello.cpp>является исходным файлом,<world>подкаталогом и /boost//filesystem ссылкой на целевую файловую систему в Jamfile в<C:\boost_1_39_0>.

Обратите внимание, что ссылка должна начинаться со слэша, если она должна относиться к проекту.

Поскольку библиотеки могут быть связаны по-разному, можно установить функции, относящиеся к линкеру.

exe hello : hello.cpp world /boost//filesystem/<link>static ; 

По умолчанию библиотеки связаны динамически. Если библиотеки должны быть связаны статически, функция<<link>>должна быть настроена на статичность.

Функции могут быть добавлены со слэшем. Если должно быть установлено более одной функции, она добавляется с другим слэшем к предыдущей функции.

exe hello : hello.cpp world /boost//filesystem/<link>static/<threading>multi ; 

<<threading>>- еще одна функция, которая может быть установлена на один или несколько. Еслиздравствуйтедолжны быть связаны с безвредной версией Boost. Функция файловой системы может быть установлена соответствующим образом.

Связывание библиотеки Boost C++ с помощью ссылки на Jamfile может не всегда работать. Если библиотеки Boost C++ были установлены по-другому, потому что они не были построены из источника, например, не будет никакого Jamfile для ссылки.

lib filesystem : : <name>libboost_filesystem <search>C:/libs ; 
exe hello : hello.cpp world filesystem : <include>C:/include ; 

Правило 331 может быть использовано не только для создания библиотеки из источника. Он также должен использоваться для обозначения существующей и предварительно построенной библиотеки.

Если<lib>не следует строить библиотеку из источника, второй параметр должен быть пустым. Вместо этого в третьем параметре используются функции<<name>>и<<search>>для указания названия библиотеки и места, где Boost. Постройка найдет библиотеку.

Важно указать название библиотеки независимо от платформы. Например, для джемфила выше буста. Build попытается найти файл<libboost_filesystem.lib>в Windows. Обычное расширение файла автоматически добавляется.

Если вы хотите ссылаться на файл, указав его точное имя, вы можете использовать функцию<<file>>.

Если вам нужна системная библиотека, на которую вы можете рассчитывать. Постройте, чтобы знать, где найти эту функцию<<search>>.

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

lib filesystem : : <name>libboost_filesystem <search>C:/libs ; 
explicit filesystem ; 
project : requirements <include>C:/include <library>filesystem ; 
lib world : world.cpp ; 

Функция<<library>>должна использоваться для добавления библиотечной зависимости к правилу<project>.<<library>>должно относиться к правилу<lib>, которое использует уже известные признаки<<name>>и<<search>>.

Сейчас очень важно сделать правило<lib>ясным. Это делается с помощью правила<explicit>. Это важно, поскольку по умолчанию все цели в Jamfile построены. Как правило<project>определяет требования для всех целей в Jamfile, они также являются требованиями для правила<lib>. Таким образом, правило<lib>относится к самому себе. Если правило<lib>сделано явным, хотя оно не построено и не имеет рекурсивной ссылки.

Обратите внимание, что порядок правил в Jamfile имеет значение только в том случае, если правило относится к цели: Прежде чем на цель можно ссылаться, она должна быть определена.


Best practices
How Boost.Build is used by others

Как Буст. Build - это высокоуровневая система сборки, которая приносит вам наибольшую пользу, если вы сохраняете независимость платформы и компилятора Jamfiles. В конце концов, идея состоит в том, чтобы создавать проекты на C++ или C на любой платформе с любым компилятором без необходимости изменять или поддерживать несколько Jamfiles.

Типичная проблема, с которой вы столкнетесь, заключается в том, что сторонние библиотеки, которые вы хотите использовать, будут установлены в разных каталогах. Если вы хотите создать свой проект на платформах Windows и Unix, пути также выглядят совсем по-другому. Кроме того, вам может потребоваться ссылка на некоторые системные библиотеки на платформе, но не на другой.

Вместо того, чтобы пытаться установить пути для различных платформ в Jamfiles проекта, лучше полагаться на конфигурационные файлы в каждой системе для системных настроек. Оказывается,b2действительно ищет еще два конфигурационных файла, когда он начинается.

Файл<site-config.jam>должен использоваться для установки опций для всей системы. Поскольку он зависит от машины, b2ожидает найти его в<C:\Windows>на платформах Windows и в</etc>на системах Unix. Поскольку<site-config.jam>— это машинно-зависимые пути к локальным библиотекам.

Пользователи не могут создавать или изменять<site-config.jam>. Им нужно будет либо подождать, пока системные администраторы обновят файл, либо их заставят снова добавить в свои собственные Jamfiles пути, специфичные для системы. Поскольку ни один из них не является хорошим решением,b2также ищет файл<user-config.jam>в домашнем каталоге пользователя. В Windows это подкаталог<C:\Users>, в Unix поддиректива</home>. Поскольку файл<user-config.jam>может поддерживаться пользователями, он, вероятно, используется чаще, чем<site-config.jam>.

Вы используете<site-config.jam>и<user-config.jam>так же, как и любой другой Jamfile. Поскольку эти конфигурационные файлы принадлежат не проекту, а машине или пользователю на машине, они могут содержать параметры, специфичные для машины. Например, они могут содержать правило<using>.

using msvc ; 

Правило<using>выше говоритb2использовать набор инструментов msvc. Если вы знаете, что в системе установлен только Visual C++, имеет смысл поместить эту строку в файл конфигурации. Тогдаb2больше не нужно гадать, какой набор инструментов использовать, и не будет опускать предупреждение.

Если вы определяете цели в<site-config.jam>или<user-config.jam>и хотите сослаться на эти цели в Jamfiles, для определения имени должно использоваться правило<project>.

using msvc ; 
project user-config ; 
lib xml : : <name>libxml <search>C:/lib : : <include>C:/include ; 

Правило<lib>используется для обозначения предварительно построенной библиотеки, базовое название которой libxml и может быть найдено в<C:\lib>. Программа, которая использует эту библиотеку XML, вероятно, должна включать файлы заголовков из этой библиотеки. Вот почему в требованиях к использованию - это пятый параметр - функция<<include>>установлена на<C:\include>: Тот, кто использует это правило, наследует<<include>>.

Как правило<project>было использовано для установки имени user-config, Jamfile может ссылаться на библиотеку XML через /user-config//xml.

exe xmlparser : xmlparser.cpp : <library>/user-config//xml ; 

Для построенияxmlparserпрограмма должна быть связана с библиотекой XML. Несмотря на то, что расположение библиотеки и ее файлов заголовков может отличаться, Jamfile не содержит никаких системных путей. Jamfile рассчитывает найти целевой xml в пользовательской конфигурации проекта. Если это конфигурационный файл, то нет проблем с использованием системных путей, поскольку все конфигурационные файлы привязаны к машине или к пользователю на машине.

Как Буст. Build был создан для создания и установки библиотек Boost C++, есть встроенная поддержка для более легкого использования предварительно построенных библиотек Boost C++.

using msvc ; 
project user-config ; 
using boost : 1.39 : <include>C:/include/boost-1_39 <library>C:/lib ; 

Правило<using>должно использоваться для обозначения набора инструментов, называемого бустером. Этот набор инструментов отличается от наборов инструментов, таких как msvc, о которых вы читали до сих пор: Он не содержит никаких программ, которые будут запущены позже. В качестве поддержки для предварительно построенных библиотек Boost C++ был реализован набор инструментов, хотя он должен использовать правило<using>.

Как и в других библиотеках, расположение библиотек Boost C++ может варьироваться. Таким образом, имеет смысл поместить правило<using>в один из двух конфигурационных файлов.

Можно передать параметры правилу<using>: Первый — номер версии, второй — список опций. В Jamfile выше используются библиотеки Boost C++ 1.39, которые можно найти в каталогах, переданных в качестве опций.

После использования набора инструментов повышения можно использовать библиотеки Boost C++ без определения целей.

import boost ; 
boost.use-project 1.39 ; 
exe hello : hello.cpp : <library>/boost//thread ; 

Если программа использует библиотеку Boost C++, она может ссылаться на цели в проекте под названием boost. Чтобы распознать бустер проекта, необходимо импортировать модуль бустера и использовать правило<boost.use-project>: Импорт модуля повышения делает правило 403 доступным. Это правило предполагает, что номер версии является единственным аргументом. Поскольку можно использовать правило 404 для ссылки на различные версии библиотек Boost C++, проект может указать, какую версию он хочет использовать. В Jamfile выше программыHelloиспользуется Boost. Версия 1.39.


Rule reference
Building blocks for Jamfiles

Если вы управляете проектом с помощью Boost. Создавать и создавать Джамфилы, которыми вы постоянно пользуетесь. Таким образом, вы должны знать, какие правила существуют и как они используются. Следующая таблица дает вам обзор самых важных правил.

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

Table 1. Rules
Name Parameters Description
псевдоним Название : источники * : требования * : строительство по умолчанию * : требования к использованию * Ссылайтесь на источники или любые другие цели с помощью нового имени.
строительный проект режь Обратитесь к Jamfile в другом каталоге для создания проекта.
условный Условия +: Требования * Создание условных требований без использования условных свойств.
экс Название : источники * : требования * : строительство по умолчанию * : требования к использованию * Создайте исполняемый файл.
явный целевые имена * Делайте цели явными.
шар Wildcards + : исключает * Справочные файлы в каталоге через wildcards.
глоб-дерево Wildcards + : исключает * Справочные файлы в каталоге и все подкаталоги через wildcards.
устанавливать name-and-dir : sources * : requirements * : default-build * Установите файлы в каталог.
либ имена + : источники * : требования * : строительство по умолчанию * : требования к использованию * Постройте библиотеку.
проект id? : Варианты *: * Установите варианты проекта.
юнит-тест Цель : источник: свойства * Создайте и запустите исполняемый файл.
проект использования id: где Ссылка на Jamfile в другом каталоге для использования идентификатора проекта в качестве цели.
использовать Инструментальный модуль: * Выберите набор инструментов.

Твой рост. Версия может поддерживать больше правил, чем указано выше. Если вы хотите узнать, какие правила поддерживаются, вы должны проверить файлы в подкаталоге<build>вашего сайта. Постройте установку.


Feature reference
Configuration options for the build process

Функции позволяют точно указать, как построены двоичные файлы. Поскольку существует множество вариантов конфигурации, список функций довольно длинный. Следующая таблица знакомит вас с наиболее важными особенностями.

Table 2. Features
Name Values Description
<адресная модель> 16, 32, 64, 32_64 Создайте 16-, 32- или 64-битный код.
<архитектура> x86, ia64, sparc, power, mips1, mips2, mips3, mips4, mips32, mips32r2, mips64, parisc, arm, Combined, Combined-x86 Power Настройте семейство процессоров для создания кода.
1, 2, 3, ... Установите максимальную глубину шаблона.
... Передайте флаги компилятору C.
... Передайте флаги компилятору C++
включено, выключено Создание символов отладки.
... Установите путь к<def>файлу (специфический для Windows DLL).
... Определите директивы препроцессора.
включено, выключено Встроенный манифест (специфичен для набора инструментов msvc).
aix, bsd, cygwin, darwin, freebsd, hpux, iphone, linux, netbsd, openbsd, osf, qnx, qnxnto, sgi, solaris, unix, unixware, windows Используйте в условных свойствах, если функции зависят от операционных систем хоста.
... Набор включает каталоги.
выключено, включено, полно Встроенные функции.
... Ссылка на библиотеку (использование в правиле 411).
общий, статический Ссылка на общую или статическую версию библиотеки.
... Передайте флаги Линкеру.
... Установить каталог (использовать в правиле<install>).
... Установите имя базы библиотеки (используется в правиле<lib>).
<оптимизация> Скорость, пространство Создание оптимизированного кода.
выключай. Создайте профилированный код.
общий, статический Ссылка на однопоточные или потоково-безопасные библиотеки времени выполнения.
<поиск> ... Установите каталог для поиска библиотек (использовать в правиле<lib>вместе с<<name>>).
... Установить источник в параметре требований правила<project>или в условных свойствах.
aix, bsd, cygwin, darwin, freebsd, hpux, iphone, linux, netbsd, openbsd, osf, qnx, qnxnto, sgi, solaris, unix, unixware, windows Используйте условные свойства, если функции зависят от целевых операционных систем.
одиночный, многократный Создайте однопоточный или безвредный вариант.
gcc, msvc, intel-linux, intel-win, acc, борланд, como-linux, cw, dmc, hp_cxx, sun Используйте в условных свойствах, если особенности зависят от наборов инструментов.
... Не определять директивы препроцессора.
... Возьмите на себя только требования использования указанной цели, но не делайте ничего другого.
Отладка, выпуск, профиль Создайте отладку, выпуск или версию профиля.
<предупреждения> Все включено, выключено Отключите предупреждения.
<предупреждения-как-ошибки> выключай. Относитесь к предупреждениям как к ошибкам.

Для полной и актуальной ссылки на Boost. Функции сборки просматривают файл<builtin.jam>в подкаталоге<tools>вашего Boost. Постройте установку. Поиск строк, начинающихся с<feature.feature>— это внутреннее правило, используемое для определения признаков.


Copyright Boris Schäling 2009. Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)

Статья Boost.Build tutorial раздела может быть полезна для разработчиков на c++ и boost.




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.



:: Главная :: ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-08-30 11:47:00
2025-05-20 08:44:16/0.041440010070801/1