Makefile 如果其他目录中的文件已更改,则更新文件(覆盖)文件。简单生成文件

Makefile 如果其他目录中的文件已更改,则更新文件(覆盖)文件。简单生成文件,makefile,gnu-make,Makefile,Gnu Make,我有一个文件dir/a.txt,偶尔会更新。当我运行make时,我需要更新当前目录a.txt中的一个文件,如果后者已更改,则该文件将被dir/a.txt覆盖。我试过这个 all: a.txt cp dir/a.txt a.txt a.txt: dir/a.txt 但无论是否更改,它都将始终更新a.txt。在这个简单的例子中,如果使用新的修改时间戳更新文件,则无关紧要,但我想学习如何使用make仅在dir/a.txt发生更改时更新文件。您可以这样做: .PHONY: all all:

我有一个文件
dir/a.txt
,偶尔会更新。当我运行
make
时,我需要更新当前目录
a.txt
中的一个文件,如果后者已更改,则该文件将被
dir/a.txt
覆盖。我试过这个

all: a.txt
    cp dir/a.txt a.txt

a.txt: dir/a.txt
但无论是否更改,它都将始终更新
a.txt
。在这个简单的例子中,如果使用新的修改时间戳更新文件,则无关紧要,但我想学习如何使用
make
仅在
dir/a.txt
发生更改时更新文件。

您可以这样做:

.PHONY: all

all: a.txt

a.txt: dir/a.txt
    cp $< $@
对于永远不会创建的目标,
all
,因此配方 将永远被执行。这个目标实际上是,, (顺便说一句)你应该告诉
make
它是:

.PHONY: all
.PHONY: all