Makefile 将目标名称转发给 docker 运行 命令
Makefile forward the target name to docker run command
我正在尝试编写一个简单的 Makefile,将调用它的目标转发给 docker 运行 命令。有一个构建 docker 文件的依赖项,此依赖项创建一个虚拟的 .docker-build 文件以确保 docker 图像的构建仅 运行s 一次(不是确定我是否关注 norm/conversion 此处 ...)
问题是如果用户键入 make
没有任何目标名称,那么 $@
等于文字“Makefile”,我想在调用 [=20 时将其更改为“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
的文件
您不能使用现有文件名作为目标。试试这个
touch clean
make clean
make all
您的 Makefile
有一个名为 clean
的目标,但可能无法正常工作。目标 all
定义为 .PHONY
目标,因此有效。
如果你真的想按照你的意愿工作,试试这个:
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
我正在尝试编写一个简单的 Makefile,将调用它的目标转发给 docker 运行 命令。有一个构建 docker 文件的依赖项,此依赖项创建一个虚拟的 .docker-build 文件以确保 docker 图像的构建仅 运行s 一次(不是确定我是否关注 norm/conversion 此处 ...)
问题是如果用户键入 make
没有任何目标名称,那么 $@
等于文字“Makefile”,我想在调用 [=20 时将其更改为“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
的文件
您不能使用现有文件名作为目标。试试这个
touch clean
make clean
make all
您的 Makefile
有一个名为 clean
的目标,但可能无法正常工作。目标 all
定义为 .PHONY
目标,因此有效。
如果你真的想按照你的意愿工作,试试这个:
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