Как вы справляетесь с большими зависимостями в Boost? - PullRequest
9 голосов
/ 06 октября 2008

Boost - очень большая библиотека с множеством взаимозависимостей, которая также требует много времени для компиляции (что для меня замедляет наш CruiseControl время отклика).

Единственные части boost, которые я использую, это boost :: regex и boost :: format.

Есть ли простой способ извлечь только те части надстройки, которые необходимы для конкретной подбиблиотеки надстройки, чтобы ускорить компиляцию?

РЕДАКТИРОВАТЬ: Чтобы ответить на вопрос о том, почему мы восстанавливаем повышение ...

  1. Анализ файлов заголовка Boost по-прежнему занимает много времени. Я подозреваю, что если бы мы могли извлечь только то, что нам нужно, анализ мог бы произойти и быстрее.
  2. Наша установка CruiseControl создает все с нуля. Это также облегчает, если мы обновляем версию Boost, которую мы используем. Но я постараюсь выяснить, можем ли мы изменить наш процесс сборки, чтобы увидеть, может ли наша сборочная машина наращивать ускорение при возникновении изменений и фиксировать эти изменения в SVN. (Моя компания придерживается политики, согласно которой все, что выходит за дверь, должно быть построено на «сборочной машине».)

Ответы [ 4 ]

8 голосов
/ 06 октября 2008

Во-первых, вы можете использовать инструмент bcp (находится в подпапке tools), чтобы извлечь заголовки и файлы, которые вы используете. Это не поможет со временем компиляции. Во-вторых, вам не нужно каждый раз перестраивать Boost. Просто предварительно соберите файлы lib один раз и при каждом изменении версии и скопируйте папку «stage» во время сборки.

2 голосов
/ 06 октября 2008

Мы используем Boost, но мы включаем объектные файлы только для тех типов, которые мы на самом деле используем. То есть мы создаем нашу собственную статическую библиотеку с набором собственных утилит и включаем те части Boost, которые мы находим полезными. Наш CMakeLists.txt выглядит примерно так (вы можете загрузить его в CMake, если вы соответственно настроите SOURCES.)

project( MyBoost )

set(SOURCES 
  boost/regex/src/c_regex_traits.cpp
  boost/regex/src/cpp_regex_traits.cpp
  boost/regex/src/cregex.cpp
  boost/regex/src/fileiter.cpp
  boost/regex/src/icu.cpp
  boost/regex/src/instances.cpp
  boost/regex/src/posix_api.cpp
  boost/regex/src/regex.cpp
  boost/regex/src/regex_debug.cpp
  boost/regex/src/regex_raw_buffer.cpp
  boost/regex/src/regex_traits_defaults.cpp
  boost/regex/src/static_mutex.cpp
  boost/regex/src/usinstances.cpp
  boost/regex/src/w32_regex_traits.cpp
  boost/regex/src/wc_regex_traits.cpp
  boost/regex/src/wide_posix_api.cpp
  boost/regex/src/winstances.cpp
)

add_library( MyBoost STATIC ${SOURCES})
2 голосов
/ 06 октября 2008

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

1 голос
/ 06 октября 2008

Предварительно скомпилированные заголовки - это слово дня! Включите нужные заголовки в ваш предварительно скомпилированный заголовок - tada!

...