Нет. Если вы вызовете make
хотя бы один раз в Makefile
, это будет называться рекурсивным make. В GNU Make нет простого способа предотвратить это.
Прочитав статью, упомянутую в вашем сообщении, вы сможете понять, как вы пишете Makefile
s, является ли make рекурсивным или нерекурсивным.
Система сборки ядра Linux будет одним из самых известных приложений традиционной рекурсивной сборки в больших масштабах. Система сборки Android является хорошим примером нерекурсивной программы make, которая явно решает проблемы рекурсивной программы make. Обе системы сборки интенсивно используют специфические особенности GNU Make.
Во-первых, :предотвратите сортировку 'ls' с помощью 'ls -U', возможно, обновите ваш ~/bashrc, чтобы он имел 'alias ls="ls -U"' или аналогичный.
Для большого набора файлов вы можете попробовать это следующим образом:
создать набор тестовых файлов
проверьте, не вызывают ли проблемы многие имена файлов
используйте параметр xargs -пакетную обработку и поведение zip (по умолчанию )для добавления файлов в zip, чтобы избежать проблем.
Это сработало хорошо:
# create ~ 100k files
seq 1 99999 | sed "s/\(.*\)/a_somewhat_long_filename_as_a_prefix_to_exercise_zip_parameter_processing_\1.txt/" | xargs touch
# see if zip can handle such a list of names
zip -q /tmp/bar.zip./*
bash: /usr/bin/zip: Argument list too long
# use xargs to batch sets of filenames to zip
find. -type f | xargs zip -q /tmp/foo.zip
l /tmp/foo.zip
28692 -rw-r--r-- 1 jmullee jmullee 29377592 2017-12-16 20:12 /tmp/foo.zip