Что такое Boost Jam и стоит ли переходить на него? - PullRequest
17 голосов
/ 04 февраля 2009

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

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

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

Ответы [ 4 ]

28 голосов
/ 25 сентября 2009

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

  • Я хочу, чтобы мой код создавался повсюду. Boost builds,
  • он использует относительно простой декларативный язык, чтобы указать, как создавать цели, и
  • он может собрать все различные варианты ваших двоичных файлов (например, отладка против выпуска, 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 лет назад он казался непригодным для использования, но я слышал, что он прошел долгий путь.

9 голосов
/ 18 марта 2009

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

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

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

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

8 голосов
/ 18 марта 2009

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

5 голосов
/ 09 февраля 2009

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

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

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

Однако, как вы можете себе представить, каждая библиотека наддува состоит из множества файлов cpp и заголовочных файлов, и у каждого из них есть разные варианты (отладочные версии, версии выпуска, многопоточность и т. Д.), И поэтому это не простой процесс, чтобы просто скомпилировать библиотеку Boost самостоятельно. Вот тут-то и происходит повышение варенья. Вы даете ему команду для компиляции библиотек, а затем она выдает все команды для вас компилятору, и к концу вы получите коллекцию предварительно скомпилированных файлов .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.

...