Ускорить время компиляции/ссылки при использовании библиотек boost

Я использую Boost Program Options, и для компиляции очень небольшого кода на С++ требуется довольно много времени (10 секунд или даже больше) Это. Потребовалось 1 секунду компиляции кода без библиотеки boost.

Любая идея, как увеличить время компиляции/ссылки с помощью библиотеки boost? Это кросс-платформа, поэтому мне нужно скомпилировать код с Mac OS X/Linux/ПК.

Ответ 1

На самом деле вы не можете многое сделать за пределами обычных трюков:

  • минимизировать зависимости: извлекайте только заголовки Boost, которые вам действительно нужны, и используйте как можно более конкретные заголовки (во многих библиотеках есть один "главный" заголовок, например boost/thread.hpp, но также и подкаталог с определенными заголовками, например boost/thread/shared_mutex.hpp),
  • где это возможно, полагаться на форвардные объявления вместо того, чтобы включать весь заголовок,
  • если возможно, включите заголовок только в файл .cpp. Если вы включите его в заголовок, его нужно скомпилировать каждый раз, когда блок перевода, который включает этот заголовок, скомпилирован. Как общее правило, попытайтесь свести к минимуму количество кода, который у вас есть в заголовках,
  • все основные компиляторы поддерживают прекомпилированные заголовки. Используйте их, чтобы сократить время компиляции,
  • эксперимент с построением единства. Это может быть или не быть преимуществом в вашем случае.

И последнее, но не менее важное: окончательный вариант состоит в том, чтобы не использовать эти конкретные библиотеки Boost.

Я иногда использую некоторые Boost libs на раннем этапе, из-за удобства, и если/когда время компиляции становится слишком плохим, я начинаю искать, какие библиотеки дорого компилировать, а какие из них можно заменить относительно простым кодом. Часто Boost обременен требованием быть таким общим. Если вам не нужно что-то, что работает на 8-летних компиляторах, или которые не должны работать через довольно много разных типов, тогда вы сможете написать простую замену, которая работает для вас, и почти не занимает времени для компиляции.