psilogic: (Default)
[personal profile] psilogic
Как сделать параллельную компиляцию C++ проекта в Visual Studio Express Edition 2008?

XP, Core 2 Duo. Про параметр "maximum number of parallel project builds" в опциях знаю. Не дает эффекта :(

Знаю только метод при помощи cook-а, но это геморрой.

Date: 2009-06-17 04:12 pm (UTC)
From: [identity profile] morfizm.livejournal.com
А через MSBuild работает?

Date: 2009-06-17 04:20 pm (UTC)
From: [identity profile] psilogic.livejournal.com
нет. я так понял, среда MSBuild и использует. он способен собирать несколько проектов параллельно, а мне надо один проект, параллельно разные файлы

Date: 2009-06-17 04:23 pm (UTC)
From: [identity profile] morfizm.livejournal.com
Понятно. Нет, я так не пробовал, не знаю.

Кроме того, я ещё не видел solutions (build'ящихся регулярно), в которых меньше двух десятков проектов, так что эта проблема для меня пока, скорее, теоретическая, чем практическая.

Если проект такой большой, может его разбить на несколько? (Вынести часть функционала в библиотеку?)

Date: 2009-06-17 04:42 pm (UTC)
From: [identity profile] psilogic.livejournal.com
Уже вынес. У меня между библиотеками присутствуют зависимости, из-за этого MSBuild их собирает последовательно. И я обычно отлаживаю только одну из библиотек, так что другие пересобирать нет смысла. Попробую убрать зависимости, посмотрю, что получится.

Date: 2009-06-17 04:14 pm (UTC)
From: [identity profile] waqur.livejournal.com
Я юзаю скрипт на Powershell'е. У меня 8-ядерный процессор, параллельная сборка 32-х и 64-х битного кода, знаете ли.

Date: 2009-06-17 04:19 pm (UTC)
From: [identity profile] psilogic.livejournal.com
что в скрипте?

Date: 2009-06-17 04:32 pm (UTC)
From: [identity profile] waqur.livejournal.com
Скрипт сам написал. Они похожи на bat-файлы, но намного гибче и выразительнее. Написав пару вспомогательных функций, на них можно писать хорошие build-скрипты, довольно понятные и простые в поддержке, и притом мощно распараллеливаемые.


Вспомогательные функции называются

Schedule_CompileFile
Schedule_CompileDirectory
Schedule_Assemble_Bin16
Schedule_Assemble
Schedule_MakeLibrary
Schedule_LinkExeFile
Schedule_LinkDllFile
Schedule_Run

они принимают номер группы (об этом ниже) и другие аргументы.

вспомогательная функция ExecuteAll запускает последовательную сборку всех групп
(она вызывается в конце скрипта, после всех Schedule_*)

все задания одной группы исполняются одновременно (точнее, ещё во время работы Schedule_* они последовательно раскладываются по стопкам, а ExecuteAll сохраняет скрипт-файл для каждой стопки заданий и запускает все эти подскрипты одновременно).

Date: 2009-06-17 04:43 pm (UTC)
From: [identity profile] psilogic.livejournal.com
Уже по количеству вспомогательных функций я догадываюсь, что скриптик непростой :)

Date: 2009-06-18 07:30 am (UTC)
From: [identity profile] fregimus.livejournal.com
Никак иначе, только если на несколько библиотек разбить. Все равно проект такого размера имеет смысл разбить на несколько меньших.
Page generated Sep. 26th, 2025 07:46 pm
Powered by Dreamwidth Studios