首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何优化Makefile

如何优化Makefile
EN

Stack Overflow用户
提问于 2018-11-02 03:00:33
回答 1查看 127关注 0票数 0

我编写了一个创建Makefile的难看的复制/粘贴方式

代码语言:javascript
复制
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 $@

最大的部分跳过了,但看起来一样。有可能优化这个样板吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-11-02 08:10:09

make变量自动变量 (例如$<$@)、make函数(例如addsuffixaddprefix)和模式规则的混合:

代码语言:javascript
复制
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文件的列表,那就更好了。但是还需要更多的信息来想象如何做到这一点(sshcurlwget. ?)。当然,make shell函数将是起点:

代码语言:javascript
复制
H5 := $(shell <the-command-that-lists-the-remote-h5-files>)
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53112121

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档