2015-01-27 3 views
-3

GNU Сделать под MinGW, как известно, очень медленно при определенных условиях из-за того, как он выполняет неявные правила и как Windows предоставляет информацию о файлах (за «MinGW “make” starts very slowly»).Может ли MinGW Make ускоряться, не отключая неявные правила?

Этот предыдущий вопрос и все другие ресурсы по проблеме, которые я нашел в Интернете, предлагают обойти проблему, полностью отключив неявные правила с помощью флага -r. Но есть ли другой путь?

У меня есть «переносимый» Makefile, который опирается на них, и я хотел бы сделать так, чтобы каждый раз не запускать его каждый раз, вместо того, чтобы заставить владельца Makefile изменять это только для меня.

+1

Вопрос в том, почему это занимает много времени, чтобы начать. По умолчанию правила и переменные, безусловно, имеют значение, но есть много других вещей. Cygwin и MinGW не ускоряются ни с чем из того, что я видел/слышал, чтобы это не помогло. Является ли make-файл делать что-нибудь интересное с '$ (shell)' или '$ (wildcard)' и т. Д.? –

+0

Я прочитал связанный вопрос. Это указывает на * одну вещь, которая может ускорить запуск. Это далеко не единственное, что может замедлить обработку. Объем работы делает (даже если здание не требуется) зависит от содержимого make-файла. –

ответ

5

Вы должны использовать make -d, чтобы увидеть все, что делает make, и попытаться выяснить, где идет время. Одной из распространенных причин длительных сроков выполнения являются правила match-anything, которые используются для определения того, нужно ли перестраивать make-файл. МОЖЕТ быть удалена с помощью большинства правил «матч-что-либо»; они редко нужны больше.

Вы можете добавить это к вашему Makefile и посмотреть, если это помогает:

%:: %,v 
%:: RCS/%,v 
%:: RCS/% 
%:: s.% 
%:: SCCS/s.% 

И, если вам не нужно автоматически создать Makefile можно добавить:

Makefile: ; 

(также добавьте туда какие-либо встроенные make-файлы, которые вам не нужно автоматически создавать).

ETA кажется ваш реальный вопрос можно резюмировать, «почему может занять намного больше времени, чтобы начать на Windows, чем на Linux, и что я могу сделать, чтобы исправить это, не меняя Makefiles?»

Ответ: ничего. Make делает ровно столько же работы как в Windows, так и в Linux: в Windows нет дополнительных правил или процедур, которые можно было бы удалить. Проблема в том, что Windows NTFS работает медленнее, чем обычные файловые системы Linux для этих поисков. Я не знаю системных настроек и т. Д., Которые исправит эту проблему. Ваш единственный выбор - заставить make делать меньше работы, чтобы он был быстрее, и единственный способ сделать это - удалить встроенные правила, которые вам не нужны.

Если проблема вы действительно не хотите редактировать фактические мейкфайлы, что достаточно просто решить: просто писать правила выше в небольшой отдельный Makefile, может быть что-то вроде speedup.mk, а затем установить переменную окружения MAKEFILES=speedup.mk перед вызовом делать. Make будет анализировать этот makefile и без необходимости изменять какие-либо make-файлы.

+0

Нет, я уже знаю _why_ это медленно (перейдите по ссылке в вопросе). Теперь я спрашиваю, есть ли другое обходное решение или исправление. –

+0

@LightnessRacesinOrbit Вы не знаете (если вы не профилировали и не сказали нам), у вас есть теория, что это могут быть встроенные правила (опять же, если вы не знаете, что использование '-r' в вашем случае ускоряет работу очень сильно). Кроме того, предложения в этом сообщении * являются * удалением нескольких встроенных правил вручную. –

+1

I _gave_ вы исправить.Вы попробовали изменения, которые я предложил? Они работали? Вы попробовали мое предложение о запуске 'make -d', чтобы посмотреть, что делают дела, что вы можете избежать? Если вы не собираетесь попробовать то, что мы предлагаем, и дать обратную связь о том, как это сработало для вас, мы не можем вам помочь. – MadScientist