Сделать (параллельные задания) на Windows - PullRequest
16 голосов
/ 07 октября 2009

Какая настройка работает для GNU, выполнять параллельные задания (-j) в Windows?

Я попытался установить оболочку для cmd.exe, используя MinGW make 3.81, это работает при создании нескольких процессов, но make завершается неудачно с сообщением «ожидание задания».

Может ли это работать и каковы лучшие настройки? (MinGW / Cygwin / ???) Может кто-нибудь указать мне рабочий пример для проверки?

Ответы [ 5 ]

4 голосов
/ 09 января 2013

Совет, который может помочь пользователям CMake

Опция -jN не работает, когда вызовы make-файла выполняются рекурсивно, как обычно делают cmake-make-файлы. Но есть средство, которое снова работает, потому что в сгенерированных make-файлах CMake вызывает такой синтаксис.

$(MAKE) -f CMakeFiles\Makefile2 <subproject>

Это означает, что вы можете изменить переменную MAKE:

mingw32-make "MAKE=mingw32-make -j3"

Теперь каждый раз, когда запускается подпроект-make, он снова получает опцию "-j3". Но обратите внимание, что это эффективно не ограничивает количество параллельных компиляций до 3, как вы могли ожидать. Если у вас более 3 проектов, которые не зависят друг от друга в одной и той же иерархии, тогда все 3 проекта будут построены параллельно, и каждый из них запускает 3 шага компиляции. В результате 9 параллельных шагов компиляции.

Когда мы еще раз внимательно посмотрим на верхний Makefile, сгенерированный cmake, то увидим, что целевое «all», по сути, только запускает sub make.

$(MAKE) -f CMakeFiles\Makefile2 all

Таким образом, мы можем удалить один слой параллелизма подпроекта, вызвав

mingw32-make "MAKE=mingw32-make -j3" -f CMakeFiles\Makefile2 all

Но это приносит в жертву отчет о проделанной работе.

Надеюсь, это поможет.

3 голосов
/ 05 августа 2012

Я решил эту проблему, поэтому я делюсь решением для всех.

Вы можете попробовать MinGW-TDM (Домашняя страница: http://tdm -gcc.tdragon.net / ) или MinGW-Equation (Страница загрузки: http://www.equation.com/servlet/equation.cmd?fa=fortran).

Например, установить 32-битную версию в D:\MinGW\MinGW32 (и 64-битную версию в D: \ MinGW \ MinGW64, если вы хотите использовать 64-битные двоичные файлы компиляции)

Создайте командный файл следующим образом, затем запустите его в каталоге сборки:

Set MinGW_bin=D:\MinGW\MinGW32\bin
Set MSys_bin=D:\MinGW\msys\bin
Set Path=%MSys_bin%;%MinGW_bin%
mingw32-make SHELL=CMD.exe -j6 -f makefile

Вы можете скачать MSYS с http://sourceforge.net/apps/trac/mingw-w64/wiki/MSYS.. В нем много утилит, подобных UNIX, которые требовали создания множества библиотек с открытым исходным кодом, приложений.

Где -j6 - опция для запуска 6 заданий параллельной компиляции.

СОВЕТ: вы можете установить опцию -jN, где N = количество ядер (потоков) процессора, кратное 1,5. В моем случае мой ЦП имеет 4 потока, поэтому я установил это значение на 6.

Примечание: вы можете запустить

make.exe -jN -f makefile

без опции SHELL=CMD.exe, и ваша компиляция выполняется параллельно, но в некоторых случаях она не совместима (где make.exe берется из каталога MSYS).

С уважением,

3 голосов
/ 04 февраля 2011

Я нашел эту запись в блоге Дэнни Торпа , которая объясняет проблемы с параллельной сборкой в ​​Windows. По сути, сначала нужно задать следующую переменную среды:

set SHELL=cmd.exe

После этого я смог выполнить команду стиля make -j, но, к сожалению, не контролируемую команду стиля make -jN.

3 голосов
/ 24 мая 2010

Насколько я понимаю, параллельные задания GNU Make зависят от базовой платформы для предоставления информации о загрузке (CPU). К сожалению, это делается не совместимым с Windows способом, и только команда «make -j» выполняет масштабирование. Эта команда (без максимального количества заданий) потенциально довольно опасна, так как она съест память, как бешеную голодную собаку (я пробовал ее на Qt, и она рухнула на QtWebkit, крупнейшем проекте в Qt, 4 ГБ ОЗУ, Win7). 1001 *

Если подумать, у меня возникает ощущение, что make -j3 работает быстрее, чем make, но в свете того, что я могу найти в Интернете (форумы, руководства ...), он кажется очень специфичным для POSIX / linux.

Кстати, я удивлен, что ваш вопрос был отклонен.

2 голосов
/ 07 февраля 2011

У меня никогда не было проблем с использованием make -jn под Cygwin. Это работает довольно хорошо. Я регулярно использую его с cl.exe компилятором Microsoft. Это просто работает из коробки для меня. Очень похоже на UNIX, что является хорошей вещью & trade ;. Сценарии сборки прекрасно переносятся на Linux и Mac. Тщательно рекомендуется.

Никогда не любил MinGW make, так как я попал в место, где 5 обратных косых черт было слишком мало, а шесть - слишком много. Вздох! (Чтобы использовать взломы MinGW, чтобы в пути AFAIK допустимы имена пути, разделенные обратной косой чертой.)

...