Что такое Boost Jam и стоит ли переходить на него?

Что такое Boost Jam и стоит ли переходить на него?

Я понимаю, что джем - это система сборки, созданная на основе перформанса, но я не уверен, чем отличается бустер джем и обычный джем.

Я также надеюсь, что в SO-сообществе может быть кто-то, кто работал с ним и, возможно, сможет выделить некоторые различия и / или преимущества.

4 ответа

Решение

Для моих целей это просто то, что создает библиотеку буста для вас, я не знал, что вы могли бы сделать с ней что-то еще, поэтому я не понимаю, что вы могли бы иметь в виду, переходя на нее. И извините, но я не знаю, что такое обычное варенье. Поскольку никто не дал ответа, я просто предоставлю свое понимание.

Boost представляет собой набор классов и функций для C++, полезных для различных задач. Классы и функции boost сгруппированы в библиотеки. Некоторые из библиотек имеют весь свой код в заголовочных файлах, которые можно использовать просто с помощью оператора препроцессора #include, в то время как другие (такие как файловая система или библиотека регулярных выражений) имеют часть своей реализации в файлах.cpp.

Компиляция этих файлов.cpp может занять несколько лет (это может занять 30 минут в зависимости от того, что вы компилируете), и было бы очень больно, если бы каждый раз, когда вы захотели перекомпилировать программу, потребовалось полчаса. Так что они сделали только для тех библиотек, которые частично хранятся в файлах.cpp, вы можете предварительно скомпилировать их в файл.lib, и это цель повышения варенья. Это означает, что вам нужно потратить только полчаса на их составление один раз, и с этого момента вам больше не придется ждать полчаса снова.

Однако, как вы можете себе представить, каждая библиотека наддува состоит из множества файлов cpp и многих заголовочных файлов, и у каждого из них есть много разных разновидностей (отладочные версии, версии выпуска, многопоточные и т. Д.), И поэтому это не простой процесс просто скомпилируйте библиотеку буста самостоятельно. Вот тут-то и происходит повышение варенья. Вы даете ему команду для компиляции библиотек, а затем она выдает все команды для вас компилятору, и к концу вы получите коллекцию предварительно скомпилированных файлов.lib, один для каждый другой вкус каждой библиотеки. Заголовочные файлы каким-то образом сообщают компоновщику, какие файлы lib следует включить, поэтому, если у вас настроены правильные пути, правильный вариант предварительно скомпилированного файла.lib будет автоматически связан с вашей программой, что сэкономит вам 30-минутную компиляцию.

Вы можете увидеть, какие библиотеки нужно скомпилировать с помощью boost jam, а какие нет, заглянув на эту страницу: http://www.boost.org/doc/libs/1_37_0 - если библиотеке не нужен файл lib (и, следовательно, не требует, чтобы вы сначала связались с boost jam), она будет говорить "Build & Link: только заголовок", тогда как если библиотека требует предварительной компиляции файла lib, она будет говорить "Build & Link: автоматическое связывание".

Кроме того, если вы работаете в Windows, вы можете загрузить предварительно скомпилированные.lib-файлы, чтобы вам никогда не приходилось использовать boost jam. Чтобы получить это, вам нужно перейти на страницу www.boost.org, перейти в раздел "Приступая к работе" и пройти его до конца, просто чтобы убедиться, что все настроено правильно. Одна из ссылок в версии для Windows на этой странице говорит вам, где найти предварительно скомпилированные файлы.lib.

Я использую Boost Jam для своей кроссплатформенной разработки на C++. Я выбрал это, потому что

  • Я хочу, чтобы мой код создавался везде, где сборки Boost,
  • он использует относительно простой декларативный язык, чтобы указать, как создавать цели, и
  • он может собрать все различные варианты ваших двоичных файлов (например, отладка и выпуск, 32-разрядный и 64-разрядный, msvc и gcc) в одном вызове с абсолютным минимумом связанных с ароматом исключений в объявлениях сборки.

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

В этой статье сравнивается Boost Jam с CMake, SCons и Eclipse CDT: http://syrcose.ispras.ru/2009/files/04_paper.pdf

Насколько я понимаю, Boost Jam является ответвлением от Perforce Jam, поддерживаемым сообществом Boost, и что Perforce Jam больше не поддерживается активно ( примечания к выпуску имеют последнее обновление в апреле 2003 года).

Конечно, если вы не заботитесь о кроссплатформенной разработке, есть более простые пути, как уже упоминали другие. Лично я продолжаю возвращаться к Eclipse CDT; 5 лет назад он казался непригодным для использования, но я слышал, что он прошел долгий путь.

Как вы заявляете, Boost Jam является системой сборки и может использоваться независимо от любых других библиотек boost. Я ничего не знаю о Perforce Jam, но, насколько я понимаю, Boost jam очень похож и в основном совместим.

Основное отличие состоит в том, что Boost Jam часто поставляется с Boost Build, набором правил jam, предназначенных для общих задач, например, для компиляции библиотек, запуска модульных тестов, создания документации по Doxygen и т. Д.

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

Недостаток в том, что синтаксис очень привередливый, и за пределами сайта поддержки нет хорошей документации. Но я думаю, что Perforce Jam так же плох в этом отношении.

Учитывая выбор инструментов сборки, я бы не стал переходить на джемы. Есть лучшие системы сборки - CMake / SCons для C/C++, qmake для Qt, Ant для Java, NAnt и MSBuild для.NET и так далее. Они не могут быть технически лучше, но их будет менее болезненно использовать просто потому, что с ними знакомо гораздо больше людей (с другой стороны, они могут быть технически лучше, конечно:D).

Другие вопросы по тегам