Я пытаюсь использовать make-файл для управления процессом сборки в небольшом проекте, где целевое число и целевые имена заранее неизвестны, но зависят от ввода.В частности, я хочу создать группу файлов данных (скажем, .csv
файлы) в соответствии с файлом cities_list.txt
со списком названий городов внутри.Например, если содержимое txt-файла:
newyork washington toronto
, тогда скрипт с именем write_data.py
сгенерирует три файла с именем newyork.csv
, washington.csv
и toronto.csv
.Когда содержимое файла cities_list.txt
изменится, я хочу, чтобы make умело справился с этим изменением, то есть обновил только новые файлы городов.
Я пытался определить имена переменных в именах целей, чтобы это произошло, но безуспешно.Сейчас я пытаюсь создать несколько промежуточных файлов .name
, как показано ниже:
all: *.csv
%.name: cities_list.txt
/bin/bash gen_city_files.sh $<
%.csv: %.name write_data.py
python3 write_data.py $<
clean:
rm *.name *.csv
Это, похоже, очень близко к успеху, но дает только один файл .csv.Причина очевидна, потому что make не может определить, какие файлы должны быть сгенерированы для цели all
.Как я могу дать понять, что этот *.csv
должен содержать все файлы, где существует соответствующий файл *.name
?Или есть какой-нибудь лучший способ добиться того, что я хотел сделать здесь?