Как улучшить время сборки / компиляции? - PullRequest
9 голосов
/ 08 октября 2009

Я использую Visual Studio, и кажется, что избавление от неиспользуемых ссылок и использование операторов ускоряет время моей сборки в больших проектах. Существуют ли другие известные способы ускорения времени сборки. А как насчет других языков и сред сборки?

Что обычно является узким местом при сборке / компиляции? Диск, процессор, память?

Что такое список / являются хорошими ссылками для распределенных сборок?

Ответы [ 12 ]

0 голосов
/ 09 апреля 2013

Для C ++ узким местом мэра является дисковый ввод / вывод. Многие заголовки включают в себя и другие заголовки, что приводит к открытию и чтению большого количества файлов для каждого модуля компиляции.

Вы можете достичь значительного улучшения, если переместите источники на RAM-диск. Даже больше, если вы убедитесь, что ваши исходные файлы прочитаны ровно один раз.

Итак, для новых проектов я начал включать все в один файл, который я называю _.cpp. Это структура выглядит так:

/* Standard headers */
#include <vector>
#include <cstdio>
//...

/* My global macros*/
#define MY_ARRAY_SIZE(X) (sizeof(X)/sizeof(X[0]))

// My headers
#include "foo.h"
#include "bar.h"
//...

// My modules
#include "foo.cpp"
#include "bar.cpp"

И я компилирую только этот единственный файл.

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

Когда моя программа что-то пропускает, я добавляю ее заголовок и источник только в этот модуль.

Таким образом, каждый исходный файл и заголовок читаются ровно один раз и создаются очень быстро. Время компиляции увеличивается только линейно по мере добавления файлов, но не квадратично. Мой хобби-проект - около 40000 loc и 500 модулей, но он все равно компилируется около 10-20 секунд. Если переместить все источники и заголовки в RAM-диск, время компиляции сократится до 3 секунд.

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

0 голосов
/ 08 октября 2009

Не компилировать с включенной отладкой.

...