Для 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 секунд.
Недостатком этого является то, что существующие кодовые базы довольно трудно реорганизовать для использования этой схемы.