Сделать (параллельные задания) в Windows
Какая настройка работает для GNU, выполняет параллельные задания (-j) в Windows?
Я попытался установить оболочку в cmd.exe, используя MinGW make 3.81, это работает при создании нескольких процессов, но делает сбой с сообщением "ожидание работы".
Может ли это работать и что лучше всего настроить? (MinGW/Cygwin/???)
Может ли кто-нибудь указать мне на рабочий пример для тестирования?
Ответы
Ответ 1
У меня никогда не было пробок с помощью make -jn
под Cygwin. Он работает довольно хорошо. Я регулярно использую его с компилятором Microsoft cl.exe
. Это просто работает для меня. Очень UNIX, как, Good It & Thing & trade;. Построить скрипты порт хорошо для Linux и Mac. Тщательно рекомендуется.
Никогда не нравился MinGW, так как я добрался до места, где 5 обратных слэшей было слишком мало, но шесть было слишком много. Вздох! (Чтобы сделать с помощью MinGW хаки, чтобы сделать обратные слеши разделенные имена путей допустимыми в make AFAIK.)
Ответ 2
Я нашел эту запись в блоге Danny Thorpe, которая объясняет проблемы с параллельной сборкой на Windows. В основном это означает, что сначала необходимо установить следующую переменную среды:
set SHELL=cmd.exe
С этим я смог запустить команду стиля make -j
, но, к сожалению, не управляемую команду стиля make -jN
.
Ответ 3
Я решил эту проблему, поэтому я разделяю решение для всех.
Вы можете попробовать 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 = количество ядер ЦП (потоков) на несколько. В моем случае у моего процессора 4 потока, поэтому я установил это значение в 6.
Примечание: вы можете запустить
make.exe -jN -f makefile
без SHELL=CMD.exe
, а ваша компиляция выполняется параллельно, но в некоторых случаях она несовместима (где make.exe
поступает из каталога MSYS).
Привет,
Ответ 4
Совет, который может помочь пользователям CMake
Параметр -jN не работает, когда вызовы make файла делают рекурсивно, как обычно делают make-make файлы cmake.
Но есть средство, которое снова работает, потому что в сгенерированных make файлах CMake вызывает через такой синтаксис.
$(MAKE) -f CMakeFiles\Makefile2 <subproject>
Это означает, что вы можете изменить переменную MAKE:
mingw32-make "MAKE=mingw32-make -j3"
Теперь каждый раз, когда запускается подпроект, он снова получает параметр "-j3".
Но учтите, что это фактически не ограничивает количество параллельных компиляций до 3, как вы могли ожидать. Если у вас более трех проектов, которые не зависят друг от друга в одной иерархии, все 3 проекта будут строить параллельно, и каждый из них запускает 3 этапа компиляции. Результат в 9 параллельных этапах компиляции.
Когда мы еще раз взглянем в верхний Makefile, сгенерированный cmake, тогда мы увидим, что цель "все" по существу только запускает sub make.
$(MAKE) -f CMakeFiles\Makefile2 all
Таким образом, мы можем удалить один слой подпроекта parallelism, вызвав
mingw32-make "MAKE=mingw32-make -j3" -f CMakeFiles\Makefile2 all
Но это жертвует отчет о прогрессе.
Я надеюсь, что это все равно поможет.
Ответ 5
Насколько я понимаю, GNU Выполняет параллельные задания в зависимости от базовой платформы для загрузки (CPU) информации о загрузке. Это, к сожалению, выполняется несовместимым с Windows способом, и только команда make -j делает что-то масштабируемое. Эта команда (без максимального количества заданий) потенциально опасна, поскольку она будет потреблять память, как бешеная голодающая собака (я пробовал ее на Qt, и она разбилась на QtWebkit, крупнейший проект в Qt, 4 ГБ оперативной памяти, Win7).
С другой стороны, я чувствую, что make -j3 работает быстрее, чем make, но в свете того, что я могу найти в Интернете (форумы, руководство...), он кажется очень функциональным для POSIX/Linux.
Кстати, я удивлен, что ваш вопрос был отклонен.