Что это такое? Данная возможность указывает компилятору запускать несколько процессов на компиляцию, что в свою очередь сокрашает время сборки проекта в несколько раз. Данная возможность особенно полезна для владельцев многоядерных процессоров.
LinuxВ Linux с этим деоа обстоят очень просто. Для этого нужно выполнить команду
make со следующими параметрами:
make -j [processMax],
где
processMax - кол-во желаемых процессов.
Примечание: Библиотека Qt поддерживает сборку с вышеуказанным параметром. Из своего опыта скажу, что время компиляции сократилось примерно в раза 4. Так что, экономте свое время
WindowsВ Windows дела обсоят хуже, но такая возможность есть. Она оффициально представлена в
Visual Studio 2008, но также пресудствует в
Visual Studio 2005 (хотя и не задокументирована).
Итак.., за это отвечает флаг компиляции
/MPФлаг
/MP указывает компилятору компилировать файлы параллельно в пределах одного проекта. Обычно это дает линейный прирост скорости компиляции. Процесс линковки остаеться такойже (флаг не влияет на её скорость).
Как же воспользоваться данным флагом? Очень просто, достаточно добавить в файл вашего проекта (*.pro) стороку и пересобрать проект:
QMAKE_CXXFLAGS_RELEASE += -MP[processMax]
где
processMax - кол-во желаемых процессов.
Вы можите спросить почему флан используеться только RELEASE сборки?. По умолчанию, флаг
/Gm включен для режима DEBUG сборки, и отключен для режима RELEASE сборки. В DEBUG сборке флаг
/MP конфликтует с флагом
/Gm, в результате будет проигнорирован (отключен). В этом заключаеться основной недостаток. Про остальные флаги с которыми конфликтует флаг
/MP можно посмотреть здесь:
MSDN: /MP (Build with Multiple Processes)Собирать Qt с таким флагом не пытался.
Огранизация своего проекта для параллельной сборкиЕсли вы пишите библиотеку или другое приложение с несколькими модулями, которые зависят друг от друга и вы (или третьи лица) захотите распараллелить её сборку, то для начала нужно выполнить одно требование - указать очередность сборки модулей. Это делаеться добавлением строки
CONFIG += ordered
в файл проекта. Пример:
CONFIG += ordered
SUBDIRS = module1 \
module2 \
module3 \
...
При этом вы гарантированно получите очередность сборки.
ЗЫ: Думаю эта статья будет кому-то полезна. Рад выслушать критику
ЗЗЫ: После критики добавим её в вику