【发布时间】:2021-12-04 08:40:57
【问题描述】:
我正在尝试编写一个简单的 Makefile,它将调用它的目标转发到 docker run 命令。有一个构建 docker 文件的依赖项,并且此依赖项创建一个虚拟 .docker-build 文件以确保 docker 映像的构建只运行一次(不确定我是否在此处遵循规范/转换...)
问题是,如果用户键入 make 而没有任何目标名称,那么 $@ 等于文字“Makefile”,我想在调用 docker run 命令时将其更改为“all”。但由于某种原因它不起作用,代码总是进入 else 块。
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
【问题讨论】:
-
Makefile 还有比这更多的吗?如果这确实是整个 Makefile,那么 shell 脚本(
docker run --rm image-name make "${1:-all}")会更好吗?