Мне нужно обработать группу файлов в каталоге, передав их в matlab или скрипт python.Пакетная обработка: GNU-make, Snakemake или что?
Для каждого входного файла FileName.IN в каталоге мне нужно получить выходной файл FileName.OUT.
На самом деле не имеет значения, является ли решение сценарием Python или bash.
Для достижения своей цели я пробую GNU Make (или Python Snakemake), однако я немного застрял на нем. Похоже, я могу сказать, что GNU Make сделать: «Эй, для каждого выходного (целевого) файла FileName.out выполните поиск соответствующего FileName.IN (предварительные требования)».
Однако то, что я хочу сделать, - это как раз наоборот, как указано выше.
- Является
make
(илиsnakemake
) правильным выбором? - Что еще вы предложите?
Мой makefile
код выглядит следующим образом, но это не делает работу (я новичок с GNU сделать):
in_files = *.IN
out_files = *.out
$(out_files) : $(in_files)
matlab -nosplash -nodesktop -r "a_matlab_function('$<','[email protected]')"
Это * много * лучше, чем скрипт _bash_ выше. Он проверяет возвращаемые значения по мере их поступления. Вы можете запустить его второй раз, и он будет только переконвертировать файлы, которые были изменены. Он будет использовать _all_ ваши процессоры, вы просите _make_ красиво. – bobbogo
Он отлично работает, спасибо большое. Можете ли вы объяснить роль цели PHONY в этом случае? В этом руководстве это не очень полезно. Также я не понимаю, как используются переменные (in_files и out_files): они определены, но не используются в правиле. Каким образом правило может ввести правильное имя файла? – Robyc
Чтобы понять правила шаблона, см. Https://www.gnu.org/software/make/manual/html_node/Pattern-Intro.html. Я не уверен, что вы подразумеваете под руководством, не полезным, но '.PHONY 'в основном говорит о том, что эта цель (здесь,' все') не представляет собой реальный файл на диске, это просто «поддельная» цель, которая может быть использована для создания других целей (через свой список предварительных условий). – MadScientist