Есть ли способ заставить make-файл автоматически выгружать другой make-файл? - PullRequest
1 голос
/ 30 мая 2019

я знаю, что можно выполнить стандартные правила в make-файле, просто включив их как

hi:; echo hello

include hi

но есть ли способ сделать это, чтобы извлечь внешний ввод, такой как ftp-сервер или, скажем, aws s3, чтобы получить "новорожденный" make-файл и затем включить его в проект? во время выполнения? как

include https://s3.bucket.domain.com/newmk.mk

Ответы [ 2 ]

1 голос
/ 31 мая 2019

Как уже упоминалось, нет способа включить URL. Тем не менее, вы можете сделать что-то почти такое же хорошее с функцией автоматического переобработки .

в GNU make.

Для этого включите локальный загружаемый файл и создайте правило, которое знает, как его загрузить:

include newmk.mk

newmk.mk:
        wget https://s3.bucket.domain.com/newmk.mk -O $@

В этой ситуации, если (и только если) newmk.mk не существует, то будет вызван рецепт, файл будет загружен, а затем make выполнит сам себя для чтения этого файла.

1 голос
/ 30 мая 2019

Утилита make не имеет встроенной поддержки загрузки (даже не в GNU, в которую иногда вбрасывается кухонная раковина), но поскольку она может запускать произвольные команды, вы можете подделать ее

Простейшим случаем является фрагмент, подобный

your_primary_target: newmk.mk

#...
WGET=wget
WGET_FLAGS=-q

newmk.mk: 
    $(WGET) $(WGET_FLAGS) https://s3.bucket.domain.com/newmk.mk
#...

, который пытается загрузить файл, только если такого файла не существует.

Основная трудность здесь заключается в том, что вашим пользователям может понадобиться редактироватьmakefile, чтобы указать загрузчик командной строки, который у них есть (возможно, curl вместо wget), или он устанавливает любые флаги, которые требуются их сетевой среде.несуществующая цель

WGET=wget
WGET_FLAGS=-1

newmk.mk: ALWAYS
    $(WGET) $(WGET_FLAGS) https://s3.bucket.domain.com/newmk.mk

# Here "ALWAYS" is *not* the name of a file existing in the file-system
ALWAYS:

(или есть игры, в которые вы можете играть с .PHONY в GNU-make).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...