我在 GNU make 3.81 中遇到修改时间问题。
我的 Makefile 使用从远程服务器安装的数据,由于某种我不知道的原因,该服务器已将文件的修改时间设置为遥远的未来(进入下个世纪)。
Makefile 首先在本地目录中“从未来”创建到远程文件的符号链接,然后基于此文件运行多个脚本,这些脚本都会生成一些输出文件。
现在,当我想在中断后重新运行“make all”以获取所有输出文件时,它不会使用它生成的最新输出文件重新启动(假设从脚本编号 3 开始),而是重新生成所有内容从一开始,因为它注意到第一个文件(我“从未来”符号链接该文件的文件)是较新的。
是否有一个选项可以告诉 make 采用符号链接本身的修改时间,而不是符号链接目标的修改时间?
例子
这是一个重新生成问题的最小工作示例:
设置文件夹和文件:
mkdir symlinkmake
cd symlinkmake
echo $PWD > futurefile.txt
# set file modification time to the future
touch -t 212111111111 futurefile.txt
Run Code Online (Sandbox Code Playgroud)
生成文件的内容:
all: symlink.txt first_output.txt second_output.txt
symlink.txt:
ln -s futurefile.txt symlink.txt
first_output.txt: symlink.txt
cut -f1 -d"/" symlink.txt > first_output.txt
second_output.txt: first_output.txt
wc first_output.txt > second_output.txt
Run Code Online (Sandbox Code Playgroud)
现在运行make all并删除第二个输出文件。然后重新运行 make。由于第一个输出文件已经存在,因此只需要生成第二个文件。但由于futurefile.txt比任何其他文件都新,因此也会生成第一个输出文件:
make all
rm second_output.txt
make all
Run Code Online (Sandbox Code Playgroud)
在我的机器上,输出如下所示:
$ ls …Run Code Online (Sandbox Code Playgroud)