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