我正在编写一个简单的Makefile:
all: image
image: ./common ./source
docker build -t some-resource -f source/Dockerfile .
.PHONY: all image
我希望image
仅在文件夹common
或source
下的文件更改时才构建。但是当我运行make
时,即使没有任何文件更改,它也始终运行docker run
。有什么问题吗?
答案 0 :(得分:1)
运行make时,它将尝试建立第一个目标,即all
。这使得make成为目标image
。由于没有名为image
的实际文件(您甚至告诉make它是一个 phony 目标),因此它将始终执行docker
命令。
在这种情况下,make无法确定“公共和来源已更改”。通常,通过比较目标和依赖项的修改时间戳来做到这一点,但是没有实际的目标要检查(image
不是文件)。