我正在嘗試撰寫一個簡單的 Makefile,將呼叫它的目標轉發給 docker run 命令。有一個構建 docker 檔案的依賴項,這個依賴項創建了一個虛擬的 .docker-build 檔案,以確保 docker 鏡像的構建只運行一次(不確定我是否在這里遵循規范/轉換......)
問題是如果用戶輸入make沒有任何目標名稱則$@等于文字“Makefile”,我想在呼叫 docker run 命令時將其更改為“全部”。但由于某種原因它不起作用,代碼總是轉到 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
uj5u.com熱心網友回復:
原因是...
- 有一個檔案名
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
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/373559.html
上一篇:PhpStorm無法在Vagrant框內的Docker容器上使用Xdebug
下一篇:Docker容器的HTTPS
