首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Makefile将目标名称转发给docker run命令。

Makefile将目标名称转发给docker run命令。
EN

Stack Overflow用户
提问于 2021-12-04 08:40:57
回答 1查看 284关注 0票数 1

我正在尝试编写一个简单的Makefile,它将调用的目标转发给docker命令。有一个依赖项构建一个坞文件,并且这个依赖项创建一个虚拟的. docker -build文件,以确保坞映像的构建只运行一次(不确定我是否遵循了这里的规范/转换.)

问题是,如果用户键入没有任何目标名称的make,那么$@就等于文字"Makefile“,我想在调用docker命令时将其更改为"all”。但由于某些原因,它不起作用,代码总是转到其他块。

代码语言:javascript
复制
NAME=program1
.PHONY: all
.docker-build:
    docker build . -t ${NAME}
    echo "" > .docker-build

clean:
    docker stop $(docker ps -aq)
    docker image rm -f ${NAME}
    rm -r .docker-build

%: .docker-build
ifeq ($($@),"Makefile")
    docker run ${NAME} make all
else
    docker run ${NAME} make $@
endif
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-12-04 09:18:34

原因是..。

Makefile文件名为

不能将现有文件名用作目标。尝尝这个

代码语言:javascript
复制
touch clean
make clean
make all

您的Makefile有一个名为clean的目标,但可能无法工作。目标all被定义为.PHONY目标,因此它可以工作。

如果您真的想按您的意愿工作,请尝试如下:

代码语言:javascript
复制
NAME=program1
.PHONY: all Makefile
.docker-build:
    docker build . -t ${NAME}
    echo "" > .docker-build

clean:
    docker stop $(docker ps -aq)
    docker image rm -f ${NAME}
    rm -r .docker-build

%: .docker-build
    docker run ${NAME} make $@

Makefile:
    docker run ${NAME} make all
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70224177

复制
相关文章

相似问题

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