我正在尝试编写一个简单的Makefile,它将调用的目标转发给docker命令。有一个依赖项构建一个坞文件,并且这个依赖项创建一个虚拟的. docker -build文件,以确保坞映像的构建只运行一次(不确定我是否遵循了这里的规范/转换.)
问题是,如果用户键入没有任何目标名称的make,那么$@就等于文字"Makefile“,我想在调用docker命令时将其更改为"all”。但由于某些原因,它不起作用,代码总是转到其他块。
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发布于 2021-12-04 09:18:34
原因是..。
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 allhttps://stackoverflow.com/questions/70224177
复制相似问题