Question

Boost est une très grande bibliothèque avec de nombreuses inter-dépendances - dont la compilation prend également beaucoup de temps (ce qui pour moi ralentit notre CruiseControl ).

Les seules parties de boost que j'utilise sont boost :: regex et boost :: format.

Existe-t-il un moyen simple d'extraire uniquement les parties de boost nécessaires à une sous-bibliothèque de boost particulière pour accélérer les compilations?

EDIT: Pour répondre à la question de savoir pourquoi nous reconstruisons Boost ...

  1. L'analyse des fichiers d'en-tête de boost prend encore beaucoup de temps. Je soupçonne que si nous pouvions extraire uniquement ce dont nous avons besoin, l’analyse serait également plus rapide.
  2. Notre configuration CruiseControl construit tout à partir de zéro. Cela facilite également la mise à jour de la version de boost que nous utilisons. Mais je vais étudier pour voir si nous pouvons changer notre processus de construction pour voir si notre machine de génération peut augmenter les performances lorsque des modifications se produisent et valider ces modifications dans SVN. (Mon entreprise a pour politique de tout construire à partir de la "machine à construire".)
Était-ce utile?

La solution

Tout d'abord, vous pouvez utiliser l'outil bcp (qui se trouve dans le sous-dossier tools) pour extraire les en-têtes et les fichiers que vous utilisez. Cela ne va pas aider avec les temps de compilation, cependant. Deuxièmement, vous n'avez pas à reconstruire Boost à chaque fois. Il suffit de pré-construire les fichiers lib une fois et à chaque changement de version, puis de copier le "stage". dossier au moment de la construction.

Autres conseils

Sauf si vous corrigez les bibliothèques boost elles-mêmes, il n'y a aucune raison de les recompiler chaque fois que vous effectuez une construction.

Nous utilisons Boost, mais nous n'incluons que les fichiers objet pour les types que nous utilisons réellement. En d'autres termes, nous construisons notre propre bibliothèque statique avec un ensemble d'utilitaires développés localement et incluons les parties de Boost que nous trouvons utiles. Notre CMakeLists.txt ressemble à ceci (vous devriez pouvoir le charger dans CMake si vous ajustez SOURCES en conséquence).

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})

Les en-têtes précompilés sont le mot du jour! Incluez les en-têtes de boost dont vous avez besoin dans votre en-tête précompilé - tada!

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top