Russian Qt Forum

Qt => Установка, сборка, отладка, тестирование => Тема начата: pastor от Ноябрь 12, 2008, 14:15



Название: Распараллеливание компиляции
Отправлено: pastor от Ноябрь 12, 2008, 14:15
Что это такое? Данная возможность указывает компилятору запускать несколько процессов на компиляцию, что в свою очередь сокрашает время сборки проекта в несколько раз. Данная возможность особенно полезна для владельцев многоядерных процессоров.

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) (http://msdn.microsoft.com/en-us/library/bb385193.aspx)

Собирать Qt с таким флагом не пытался.

Огранизация своего проекта для параллельной сборки

Если вы пишите библиотеку или другое приложение с несколькими модулями, которые зависят друг от друга и вы (или третьи лица) захотите распараллелить её сборку, то для начала нужно выполнить одно требование - указать очередность сборки модулей. Это делаеться добавлением строки

CONFIG += ordered

в файл проекта. Пример:

Цитировать
CONFIG += ordered

SUBDIRS  = module1 \
                module2 \
                module3 \
                ...

При этом вы гарантированно получите очередность сборки.


ЗЫ: Думаю эта статья будет кому-то полезна. Рад выслушать критику :)
ЗЗЫ: После критики добавим её в вику


Название: Re: Распараллеливание компиляции
Отправлено: Detonator от Ноябрь 12, 2008, 16:39
Пробовал я это. Паралельная сборка в VisualStudio отключает предкомпилируемые хидеры, что в итоге дает гораздо худшую скорость чем в один поток но с хидерами. Для компиляции самой qt может оно и будет быстрее, но для проекта я выбрал хидеры.


Название: Re: Распараллеливание компиляции
Отправлено: pastor от Ноябрь 12, 2008, 17:06
Да, есть такое : /MP (Build with Multiple Processes) (http://msdn.microsoft.com/en-us/library/bb385193.aspx). Немного обновил статью по этому поводу. Есть ещё несколько флагов компилятора с которыми конфлинтует флаг /MP.


Название: Re: Распараллеливание компиляции
Отправлено: Пантер от Ноябрь 12, 2008, 18:14
Закинь в вики статейку.


Название: Re: Распараллеливание компиляции
Отправлено: pastor от Ноябрь 12, 2008, 18:26
Обязательно закину


Название: Re: Распараллеливание компиляции
Отправлено: pastor от Ноябрь 30, 2008, 17:50
Статью закинул в вики: Распараллеливание компиляции в Qt (http://prog.org.ru/wiki/index.php?title=%D0%A0%D0%B0%D1%81%D0%BF%D0%B0%D1%80%D0%B0%D0%BB%D0%BB%D0%B5%D0%BB%D0%B8%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%BA%D0%BE%D0%BC%D0%BF%D0%B8%D0%BB%D1%8F%D1%86%D0%B8%D0%B8_%D0%B2_Qt)


Название: Re: Распараллеливание компиляции
Отправлено: juvf от Январь 14, 2009, 12:48
Да в линуксе просто, но распараллеливание в qmake нету. Поэтому как распараллелить компиляцию Qt проекта prj.pro (имею ввиду не компиляцию самой библиотеки Qt)? Надо как-то при компиляции готового, созданного qmake`ом, мейкфайла указать чтобы использовался make с опцией -j[n]. Т.е. как я понимаю надо указать какую-то опцию в prj.pro


Название: Re: Распараллеливание компиляции
Отправлено: Rcus от Январь 14, 2009, 13:13
huh?
обычно сборка приложения с использованием qmake выглядит как вызов
Код:
\> qmake && make
а тут будет
Код:
\> qmake && make -j4
правда такой вариант у меня с MinGW не работал (запускался только один поток сборки).
Без указания количества процессов приложения нормально собираются, а вот для сборки самой Qt 3 гигабайт памяти не хватает - падает в своп на сборке assistant/webkit и не может оттуда выбраться :)


Название: Re: Распараллеливание компиляции
Отправлено: Dendy от Январь 14, 2009, 13:27
Распараллеливание на уровне Make делается за счёт корректно сгенерированного Makefile. То-есть в котором указаны ВСЕ зависимости между узлами дерева сборки. В этом случае Make берёт независимые ветки дерева и выполняет их в различных потоках.

Насколько я помню QMake не может создать корректный Makefile, так как у него отсутствует механизм указания зависимостей между целями. До какой-то степени внутри одного проекта зависимости указываются нормально, но шаг влево, шаг вправо, прыжок на месте и есть риск нарваться на ошибку при сборке. В какой-то мере помогает костыль: CONFIG += ordered, но это запрещает параллельную сборку подпроектов сообще.

Вобщем, ещё одна причина использовать CMake.


Название: Re: Распараллеливание компиляции
Отправлено: juvf от Январь 14, 2009, 14:04
Я попробовал сначала qmake`ом сделать makefile, а потом вручную запустил make для этого makefile. Запускал два раза без опции -j и с ней.
Первый раз make без посторонних параметров работал в два раза дольше чем с параметром -j2.
Процессор двухядерный


Название: Re: Распараллеливание компиляции
Отправлено: lesav от Март 10, 2011, 18:26
Windows  MinGW
Добавляем поддержку паралельной компиляции MinGW в qmake:

Итак, что нужно :
1. Свободное время, ~10 минут

2. Изменить файлы
qt/qmake/generators/makefile.cpp
qt/qmake/generators/mac/pbuilder_pbx.cpp
qt/qmake/generators/symbian/symmake.cpp
qt/qmake/generators/symbian/symmake_abld.cpp


Найти в исходниках ключ -f,   и везде, где встречяется упоминание типа:
   $(MAKE) -f       или     makefilein = " -f "         или   "make -C -f "
поменять на                                                                              
   $(MAKE) -j9 -f  или     makefilein = " -j9 -f "    или   "make -C -j9 -f "

Где: ключ -j (Джоб)  указывает количество одновременно выполняемых потоков компиляции (в моем случае девять).

Кол-во потоков компиляции выбираем равным числу ядер процессора + 1 или +2.

Для процессоров ай7 или других с поддержкой гипертрейдинга
Кол-во потоков компиляции выбираем равным числу ядер умножить на два + 1 либо +2, либо +3.

Перед сборкой qmake необходимо прописать Qt-шные пути в файле
qt/src/corelib/global/qconfig.cpp
Код
C++ (Qt)
static const char qt_configure_prefix_path_str       [512 + 12] = "qt_prfxpath=C:\\qt\\2010.05\\qt";
static const char qt_configure_documentation_path_str[512 + 12] = "qt_docspath=C:\\qt\\2010.05\\qt\\doc";
static const char qt_configure_headers_path_str      [512 + 12] = "qt_hdrspath=C:\\qt\\2010.05\\qt\\include";
static const char qt_configure_libraries_path_str    [512 + 12] = "qt_libspath=C:\\qt\\2010.05\\qt\\lib";
static const char qt_configure_binaries_path_str     [512 + 12] = "qt_binspath=C:\\qt\\2010.05\\qt\\bin";
static const char qt_configure_plugins_path_str      [512 + 12] = "qt_plugpath=C:\\qt\\2010.05\\qt\\plugins";
static const char qt_configure_imports_path_str      [512 + 12] = "qt_impspath=C:\\qt\\2010.05\\qt\\imports";
static const char qt_configure_data_path_str         [512 + 12] = "qt_datapath=C:\\qt\\2010.05\\qt";
static const char qt_configure_translations_path_str [512 + 12] = "qt_trnspath=C:\\qt\\2010.05\\qt\\translations";
static const char qt_configure_examples_path_str     [512 + 12] = "qt_xmplpath=C:\\qt\\2010.05\\qt\\examples";
static const char qt_configure_demos_path_str        [512 + 12] = "qt_demopath=C:\\qt\\2010.05\\qt\\demos";
 
/*
static const char qt_configure_prefix_path_str       [512 + 12] = "qt_prfxpath=C:\\qt-greenhouse\\Trolltech\\Code_less_create_more\\Trolltech\\Code_less_create_more\\Troll\\4.6\\qt";
static const char qt_configure_documentation_path_str[512 + 12] = "qt_docspath=C:/qt-greenhouse/Trolltech/Code_less_create_more/Trolltech/Code_less_create_more/Troll/4.6/qt/doc";
static const char qt_configure_headers_path_str      [512 + 12] = "qt_hdrspath=C:/qt-greenhouse/Trolltech/Code_less_create_more/Trolltech/Code_less_create_more/Troll/4.6/qt/include";
static const char qt_configure_libraries_path_str    [512 + 12] = "qt_libspath=C:/qt-greenhouse/Trolltech/Code_less_create_more/Trolltech/Code_less_create_more/Troll/4.6/qt/lib";
static const char qt_configure_binaries_path_str     [512 + 12] = "qt_binspath=C:/qt-greenhouse/Trolltech/Code_less_create_more/Trolltech/Code_less_create_more/Troll/4.6/qt/bin";
static const char qt_configure_plugins_path_str      [512 + 12] = "qt_plugpath=C:/qt-greenhouse/Trolltech/Code_less_create_more/Trolltech/Code_less_create_more/Troll/4.6/qt/plugins";
static const char qt_configure_imports_path_str      [512 + 12] = "qt_impspath=C:/qt-greenhouse/Trolltech/Code_less_create_more/Trolltech/Code_less_create_more/Troll/4.6/qt/imports";
static const char qt_configure_data_path_str         [512 + 12] = "qt_datapath=C:/qt-greenhouse/Trolltech/Code_less_create_more/Trolltech/Code_less_create_more/Troll/4.6/qt";
static const char qt_configure_translations_path_str [512 + 12] = "qt_trnspath=C:/qt-greenhouse/Trolltech/Code_less_create_more/Trolltech/Code_less_create_more/Troll/4.6/qt/translations";
static const char qt_configure_examples_path_str     [512 + 12] = "qt_xmplpath=C:/qt-greenhouse/Trolltech/Code_less_create_more/Trolltech/Code_less_create_more/Troll/4.6/qt/examples";
static const char qt_configure_demos_path_str        [512 + 12] = "qt_demopath=C:/qt-greenhouse/Trolltech/Code_less_create_more/Trolltech/Code_less_create_more/Troll/4.6/qt/demos";
*/

 


3. Сохраняем текущий qmake под ничего незначащим именем qmake-original (как говориться на всякий пожарный случай)
copy   C:\qt\2010.05\qt\bin\qmake.exe   C:\qt\2010.05\qt\bin\qmake-original.exe

4. После всех действий остается выполнить несколько команд

cd C:\qt\2010.05\qt\qmake
C:\qt\2010.05\qt\bin\qmake.exe
C:\qt\2010.05\mingw\bin\mingw32-make -j9 -f Makefile.Release


И наслаждаемся! )))

Будет приятно, если эта информация кому нибудь пригодится!




Название: Re: Распараллеливание компиляции
Отправлено: Akon от Март 10, 2011, 21:27
Windows:
вместо nmake использовал тулзу jom.
В qmake никаких специальных флагов не выставляется.


Название: Re: Распараллеливание компиляции
Отправлено: lesav от Март 11, 2011, 06:37
Windows:
вместо nmake использовал тулзу jom

Причем здесь nmake  | jom ?
Мой пост касается MinGW (http://www.prog.org.ru/index.php?topic=8037.msg114910#msg114910)

mingw32-make -j9 -f Makefile.Release


Название: Re: Распараллеливание компиляции
Отправлено: juvf от Март 11, 2011, 06:55
Цитировать
Будет приятно, если эта информация кому нибудь пригодится!

Пригодилась. на ваш способ Qt4.7 работает.

ps способ с "QMAKE_CXXFLAGS_RELEASE += -MP " или передача в мэйк -j не работает с mingw32-make. Проверил.
pps У одного прогера под виндой работает опция -j. У меня не работает. Оказалось что я использую mingw32-make из SDK. А у него нет мингв. Он использует какойто make.exe. С make под виндой всё просто, опцию -j и будет счастье


Название: Re: Распараллеливание компиляции
Отправлено: juvf от Март 11, 2011, 07:00
Windows
Добавляем поддержку паралельной компиляции в qmake:
может в wiki добавить? Распараллеливание компиляции в Qt (http://prog.org.ru/wiki/index.php?title=%D0%A0%D0%B0%D1%81%D0%BF%D0%B0%D1%80%D0%B0%D0%BB%D0%BB%D0%B5%D0%BB%D0%B8%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%BA%D0%BE%D0%BC%D0%BF%D0%B8%D0%BB%D1%8F%D1%86%D0%B8%D0%B8_%D0%B2_Qt)


Название: Re: Распараллеливание компиляции
Отправлено: juvf от Март 11, 2011, 07:22
Цитировать
Кол-во потоков компиляции выбираем равным числу ядер процессора + 1 или +2.

Почему не +1? почему не "=  числу ядер"?


Название: Re: Распараллеливание компиляции
Отправлено: Akon от Март 11, 2011, 08:16
Windows:
вместо nmake использовал тулзу jom

Причем здесь nmake  | jom ?
Мой пост касается MinGW (http://www.prog.org.ru/index.php?topic=8037.msg114910#msg114910)

mingw32-make -j9 -f Makefile.Release

А при чем здесь конкретно твой пост?


Название: Re: Распараллеливание компиляции
Отправлено: lesav от Март 11, 2011, 08:32
Пригодилась. Ваш способ Qt4.7 работает.

ps способ с "QMAKE_CXXFLAGS_RELEASE += -MP " или передача в мэйк -j не работает с mingw32-make. Проверил.

Вы глубоко заблуждаетесь!  mingw32-make поддерживает ключ -j Просто при вызове mingw32-make без указания ключа -f, используется дефолтный Makefile, в котором вызывается mingw32-make уже без паралельной компиляции.  Посмотрите внимательно лог сборки.

После того, как вы повторите действия из моего поста (см. выше (http://www.prog.org.ru/index.php?topic=8037.msg114910#msg114910)), у вас появится возможность быстро собирать приложения в MinGW.


Почему не +1? почему не "=  числу ядер"?
Это официальные рекомендации.  
+1 уменьшает время простоя процессора при переключении задач


Название: Re: Распараллеливание компиляции
Отправлено: juvf от Март 11, 2011, 11:22
Цитировать
Вы глубоко заблуждаетесь!
Действительно, заблуждался. -j без -f не работал. Ну тогда можно просто передать в mingw32-make  два ключа
-j9 -f Makefile.Release
После передачи 2-х ключей и у меня стало быстро компеляца без "добавления поддержки паралельной компиляции MinGW в qmake". Зачем тогда нужно добавлять что-то в qmake, если достаточно в мингв-мэйк передать 2 ключа?


Название: Re: Распараллеливание компиляции
Отправлено: Akon от Март 11, 2011, 14:34
А при чем здесь конкретно твой пост?
см. Сабж

Я привел один из способов под Windows. К твоему посту мой пост не имеет никакого отношения. Или что не так?


Название: Re: Распараллеливание компиляции
Отправлено: lesav от Март 11, 2011, 14:56
Я привел один из способов под Windows. К твоему посту мой пост не имеет никакого отношения. Или что не так?

Я скромно извиняюсь!  Просто я поднял тему из глубины 2009 года, и решил что ответ был на мой пост!

Мою ошибку признаю.  Эх надо было новую тему открывать.


Название: Re: Распараллеливание компиляции
Отправлено: lesav от Март 11, 2011, 17:06
Пригодилась. Ваш способ Qt4.7 работает.
pps У одного прогера под виндой работает опция -j.
      У меня не работает. Оказалось что я использую mingw32-make из SDK.
      А у него нет мингв. Он использует какойто make.exe. С make под виндой всё просто, опцию -j
      и будет счастье

Не будет счастья!  Ибо make.exe  и  mingw32-make.exe  Это одно и тоже!

Вызывая make -j9   вы фактически вводите команду make -j9 -f Makefile All
make хватается за сценарий сборки Makefile в котором указано,
что для сборки проекта необходимо вызвать make -f Makefile.Debug и затем запусить make -f Makefile.Release
Ключ -j не наследуется на последующие вызовы make

А сценарии сборки Makefile.Release и Makefile.Debug сгенерил qmake.  Лечить нужно qmake

см. методу в Wiki (http://prog.org.ru/wiki/index.php?title=%D0%A0%D0%B0%D1%81%D0%BF%D0%B0%D1%80%D0%B0%D0%BB%D0%BB%D0%B5%D0%BB%D0%B8%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%BA%D0%BE%D0%BC%D0%BF%D0%B8%D0%BB%D1%8F%D1%86%D0%B8%D0%B8_%D0%B2_Qt#Windows_MinGW)


Название: Re: Распараллеливание компиляции
Отправлено: LisandreL от Июнь 26, 2011, 16:47
lesav, cпасибо за мануал. Разбирался по нему.
В новом SDK немного изменилась структура папок, но в целом изменения минимальны:

1) Изменяем файлы
C:\QtSDK\QtSources\4.7.3\qmake\generators\makefile.cpp
C:\QtSDK\QtSources\4.7.3\qmake\generators\mac\pbuilder_pbx.cpp
C:\QtSDK\QtSources\4.7.3\qmake\generators\symbian\symmake.cpp
C:\QtSDK\QtSources\4.7.3\qmake\generators\symbian\symmake_abld.cpp

(для компиляции только под Win видимо достаточно только первого файла)

Заменяем:
   $(MAKE) -f       или     makefilein = " -f "         или   "make -C "++" -f "
на                                                                             
   $(MAKE) -j9 -f или     makefilein = " -j9 -f "    или   "make -C "++" -j9 -f "

2) Создаём файл C:\QtSDK\QtSources\4.7.3\src\corelib\global\qconfig.cpp
Код
C++ (Qt)
/* Licensed */
static const char qt_configure_licensee_str          [512 + 12] = "qt_lcnsuser=Open Source";
static const char qt_configure_licensed_products_str [512 + 12] = "qt_lcnsprod=OpenSource";
 
/* Build date */
static const char qt_configure_installation          [11  + 12] = "qt_instdate=2011-06-25";
 
static const char qt_configure_prefix_path_str       [512 + 12] = "qt_prfxpath=C:/QtSDK/Desktop/Qt/4.7.3/mingw";
static const char qt_configure_documentation_path_str[512 + 12] = "qt_docspath=C:/QtSDK/Documentation";
static const char qt_configure_headers_path_str      [512 + 12] = "qt_hdrspath=C:/QtSDK/Desktop/Qt/4.7.3/mingw/include";
static const char qt_configure_libraries_path_str    [512 + 12] = "qt_libspath=C:/QtSDK/Desktop/Qt/4.7.3/mingw/lib";
static const char qt_configure_binaries_path_str     [512 + 12] = "qt_binspath=C:/QtSDK/Desktop/Qt/4.7.3/mingw/bin";
static const char qt_configure_plugins_path_str      [512 + 12] = "qt_plugpath=C:/QtSDK/Desktop/Qt/4.7.3/mingw/plugins";
static const char qt_configure_imports_path_str      [512 + 12] = "qt_impspath=C:/QtSDK/Desktop/Qt/4.7.3/mingw/imports";
static const char qt_configure_data_path_str         [512 + 12] = "qt_datapath=C:/QtSDK/Desktop/Qt/4.7.3/mingw";
static const char qt_configure_translations_path_str [512 + 12] = "qt_trnspath=C:/QtSDK/Desktop/Qt/4.7.3/mingw/translations";
static const char qt_configure_examples_path_str     [512 + 12] = "qt_xmplpath=C:/QtSDK/Examples/4.7";
static const char qt_configure_demos_path_str        [512 + 12] = "qt_demopath=C:/QtSDK/Demos/4.7";
/* strlen( "qt_lcnsxxxx") == 12 */
#define QT_CONFIGURE_LICENSEE qt_configure_licensee_str + 12;
#define QT_CONFIGURE_LICENSED_PRODUCTS qt_configure_licensed_products_str + 12;
#define QT_CONFIGURE_PREFIX_PATH qt_configure_prefix_path_str + 12;
#define QT_CONFIGURE_DOCUMENTATION_PATH qt_configure_documentation_path_str + 12;
#define QT_CONFIGURE_HEADERS_PATH qt_configure_headers_path_str + 12;
#define QT_CONFIGURE_LIBRARIES_PATH qt_configure_libraries_path_str + 12;
#define QT_CONFIGURE_BINARIES_PATH qt_configure_binaries_path_str + 12;
#define QT_CONFIGURE_PLUGINS_PATH qt_configure_plugins_path_str + 12;
#define QT_CONFIGURE_IMPORTS_PATH qt_configure_imports_path_str + 12;
#define QT_CONFIGURE_DATA_PATH qt_configure_data_path_str + 12;
#define QT_CONFIGURE_TRANSLATIONS_PATH qt_configure_translations_path_str + 12;
#define QT_CONFIGURE_EXAMPLES_PATH qt_configure_examples_path_str + 12;
#define QT_CONFIGURE_DEMOS_PATH qt_configure_demos_path_str + 12;

3) Запускаем Qt 4.7.3 for Desktop (MinGW)
cd c:\QtSDK\QtSources\4.7.3\qmake\
qmake
mingw32-make -j9 -f Makefile.Release

Ждём окончания компиляции.

4) Забираем получившийся exe-шник C:\QtSDK\QtSources\4.7.3\bin\qmake.exe


Название: Re: Распараллеливание компиляции
Отправлено: ppk от Август 10, 2011, 23:06
Вроде бы сделал все по инструкции, но при запуске qmake получаем:
Код:
WARNING: Failure to find: windows/registry.cpp
WARNING: Failure to find: symbian/epocroot.cpp
WARNING: Failure to find: qbitarray.cpp
WARNING: Failure to find: qbuffer.cpp
WARNING: Failure to find: qbytearray.cpp
WARNING: Failure to find: qbytearraymatcher.cpp
WARNING: Failure to find: qcryptographichash.cpp
WARNING: Failure to find: qdatetime.cpp
WARNING: Failure to find: qdir.cpp
WARNING: Failure to find: qdiriterator.cpp
WARNING: Failure to find: qfile.cpp
WARNING: Failure to find: qabstractfileengine.cpp
WARNING: Failure to find: qfileinfo.cpp
...
завршается успешно и далее на следующем шаге
Код:
C:/QtSDK/mingw/bin/mingw32-make -j3 -f Makefile.Release
mingw32-make[1]: Entering directory `C:/QtSDK/QtSources/4.7.3/qmake'
g++ -x c++-header -c -g -frtti -fexceptions -mthreads -Wall -DUNICODE -DQT_LARGEFILE_SUPPORT -DQT_BUILD_QMAKE -DQT_BOOTSTRAPPED -DQT_NO_TEXTCODEC -DQT_NO_LIBRARY -DQT_NO_STL -DQT_NO_COMPRESS -DQT_NO_UNICODETABLES -DQT_NO_GEOM_VARIANT -DQT_NO_DATASTREAM -DQLIBRARYINFO_EPOCROOT -DQMAKE_OPENSOURCE_EDITION -DQT_NODLL -DQT_NO_THREAD -DQT_NO_QOBJECT -I"." -I"generators" -I"generators\unix" -I"generators\win32" -I"generators\mac" -I"generators\symbian" -I"\include" -I"\include\QtCore" -I"\qmake" -I"\tools\shared" -I"..\..\..\Desktop\Qt\4.7.3\mingw\mkspecs\win32-g++" -o debug\qmake_pch.h.gch\c++ qmake_pch.h
qmake_pch.h:44:21: error: qglobal.h: No such file or directory
qmake_pch.h:54:19: error: qfile.h: No such file or directory
qmake_pch.h:58:21: error: qstring.h: No such file or directory
qmake_pch.h:59:25: error: qstringlist.h: No such file or directory
qmake_pch.h:60:19: error: qhash.h: No such file or directory
qmake_pch.h:63:21: error: qregexp.h: No such file or directory
qmake_pch.h:65: error: 'QT_BEGIN_NAMESPACE' does not name a type

Что с этим делать не очень понятно. Может кто-то подскажет как решить проблему?


Название: Re: Распараллеливание компиляции
Отправлено: Пантер от Январь 18, 2012, 11:43
lesav, спасибо большое за мануал - работает замечательно.


Название: Re: Распараллеливание компиляции
Отправлено: lesav от Январь 18, 2012, 22:54
Очень рад что пригодилось.


PS  Мое правило:
Не люблю кого-то ждать, и чтоб меня ждали.  Время нужно беречь.


Название: Re: Распараллеливание компиляции
Отправлено: lesav от Февраль 06, 2012, 08:55
Вроде бы сделал все по инструкции, но при запуске qmake получаем:
Код:
WARNING: Failure to find: windows/registry.cpp
WARNING: Failure to find: symbian/epocroot.cpp
...
WARNING: Failure to find: qfileinfo.cpp
...
завршается успешно и далее на следующем шаге
Код:
C:/QtSDK/mingw/bin/mingw32-make -j3 -f Makefile.Release
mingw32-make[1]: Entering directory `C:/QtSDK/QtSources/4.7.3/qmake'
...
qmake_pch.h:65: error: 'QT_BEGIN_NAMESPACE' does not name a type

Что с этим делать не очень понятно. Может кто-то подскажет как решить проблему?

Выполнить
Код:
set QTDIR=f:\Qt\qt-4.8.0-mingw-shared
set MAKEFLAGS=
set INCLUDE=%INCLUDE%;%QTDIR%/include
set PATH=%PATH%;C:\QtSDK\mingw\bin;%QTDIR%/bin
set QMAKESPEC=win32-g++

cd %QTDIR%

configure.exe -opensource -release -shared -debug-and-release

Дождаться момента, когда начнет собираться qmake, и прекратить далнейшее выполнение configure.exe

Затем
Код:
cd ./qmake
make -j9


Название: Re: Распараллеливание компиляции
Отправлено: LisandreL от Февраль 06, 2012, 09:38
К слову, альтернативный метод распараллеливание компиляции в MinGW:
Проекты > Настройки сборки > Сборка: mingw32-make.exe in … > Параметры make:
-j9 -f Makefile.Release
(ну и -j9 -f Makefile.Debug для дебажной версии).
Вот так:
(http://s1.hostingkartinok.com/uploads/images/2012/02/8b6e1b15300d071ff050c0d943d0fbc3.png) (http://hostingkartinok.com)

Плюсы:
+ ничего не надо собирать

Минусы:
- указанные строчки надо указывать в каждой MinGW-сборке каждого проекта


Название: Re: Распараллеливание компиляции
Отправлено: Fregloin от Февраль 12, 2012, 12:28
distcc вам в помощь, очень хорошая штука, проверено многократно. проект, который собирался 3 минуты, теперь собирается за минуту двадцать сек.