По умолчанию цели Makefile являются целевыми файлами. Чтобы заставить его работать для нефайловой цели, требуется обходной путь.
Например:
- Существует задача file_upload, которая обеспечивает загрузку локального файла на удаленный сервер.
- Существуют task_a и task_b, которые зависят от задачи file_upload
- При полном запуске задания task_a и task_b вызываются последовательно, но не из одного и того же выполнения make
Предположим, что файл на удаленном сервере не изменится другими.
Можем ли мы использовать Makefile здесь, чтобы файл_upload не вызывался дважды за один полный запуск задания? Вот черновое решение:
.state/file_upload:
ensure file uploaded
create .state/file_upload
task_a: .state/file_upload
task_b: .state/file_upload
.PHONY task_a task_b
Makefile хорошо работает для случая «обеспечить желаемое состояние», когда целью является файловая система. Вопрос для нефайловых целей, есть ли какое-то применение на практике?