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

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

Я понимаю, что jam-это система сборки, построенная perforce, однако я не уверен, как boost jam & regular jam отличается.

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

4 ответов


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

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

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

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

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

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


Я использую 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 лет назад, но я слышал, что он прошел долгий путь.


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

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

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

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


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