Как оптимизировать Makefile - PullRequest
0 голосов
/ 02 ноября 2018

Я пишу некрасиво созданный способ копирования / вставки Makefile:

all: download install

install: \
    ${EXTERNAL_MODELS_LOCAL}/squeezenet_weights_tf_dim_ordering_tf_kernels.h5 \
    ${EXTERNAL_MODELS_LOCAL}/resnet50_weights_tf_dim_ordering_tf_kernels.h5 \
    ${EXTERNAL_MODELS_LOCAL}/inception_v3_weights_tf_dim_ordering_tf_kernels.h5 \

${EXTERNAL_MODELS_LOCAL}/squeezenet_weights_tf_dim_ordering_tf_kernels.h5:
    ln -s ${EXTERNAL_MODELS_ROOT}/squeezenet_weights_tf_dim_ordering_tf_kernels.h5 $@

${EXTERNAL_MODELS_LOCAL}/resnet50_weights_tf_dim_ordering_tf_kernels.h5:
    ln -s ${EXTERNAL_MODELS_ROOT}/resnet50_weights_tf_dim_ordering_tf_kernels.h5 $@

${EXTERNAL_MODELS_LOCAL}/inception_v3_weights_tf_dim_ordering_tf_kernels.h5:
    ln -s ${EXTERNAL_MODELS_ROOT}/inception_v3_weights_tf_dim_ordering_tf_kernels.h5 $@

download: $(EXTERNAL_MODELS_ROOT)/ \
    $(EXTERNAL_MODELS_ROOT)/squeezenet_weights_tf_dim_ordering_tf_kernels.h5 \
    $(EXTERNAL_MODELS_ROOT)/resnet50_weights_tf_dim_ordering_tf_kernels.h5 \
    $(EXTERNAL_MODELS_ROOT)/inception_v3_weights_tf_dim_ordering_tf_kernels.h5 \

$(EXTERNAL_MODELS_ROOT)/squeezenet_weights_tf_dim_ordering_tf_kernels.h5:
    wget https://github.com/OlafenwaMoses/ImageAI/releases/download/1.0/squeezenet_weights_tf_dim_ordering_tf_kernels.h5 \
    -O $@

$(EXTERNAL_MODELS_ROOT)/resnet50_weights_tf_dim_ordering_tf_kernels.h5:
    wget https://github.com/OlafenwaMoses/ImageAI/releases/download/1.0/resnet50_weights_tf_dim_ordering_tf_kernels.h5 \
    -O $@

$(EXTERNAL_MODELS_ROOT)/inception_v3_weights_tf_dim_ordering_tf_kernels.h5:
    wget https://github.com/OlafenwaMoses/ImageAI/releases/download/1.0/inception_v3_weights_tf_dim_ordering_tf_kernels.h5 \
    -O $@

Большая часть пропущена, но выглядит так же. Можно ли оптимизировать этот шаблон?

1 Ответ

0 голосов
/ 02 ноября 2018

Смесь переменных make, автоматических переменных make (например, $<, $@), функций make (например, addsuffix, addprefix) и правил шаблонов, может быть:

RHOST   := https://github.com/OlafenwaMoses/ImageAI/releases/download/1.0/
H5STEM  := squeezenet resnet50 inception_v3
H5      := $(addsuffix _weights_tf_dim_ordering_tf_kernels.h5,$(H5STEM))
H5LOCAL := $(addprefix $(EXTERNAL_MODELS_LOCAL)/,$(H5))
H5ROOT  := $(addprefix $(EXTERNAL_MODELS_ROOT)/,$(H5))

.PHONY: install download

install: $(H5LOCAL)

download: $(H5ROOT)

$(EXTERNAL_MODELS_LOCAL)/%.h5: $(EXTERNAL_MODELS_ROOT)/%.h5
    ln -s $< $@

$(EXTERNAL_MODELS_ROOT)/%.h5:
    wget $(RHOST)/$*.h5 -O $@

И, конечно, если бы был способ автоматически обнаружить список удаленных файлов *.h5, было бы еще лучше. Но для того, чтобы представить, как это сделать, требуется дополнительная информация (ssh, curl, wget ...?). Конечно, отправной точкой будет функция make shell:

H5 := $(shell <the-command-that-lists-the-remote-h5-files>)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...