小编Tab*_*hka的帖子

强制 GNU-make 使用符号链接目标的修改时间,而不是源的修改时间

我在 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)

unix symlink makefile gnu-make

4
推荐指数
1
解决办法
1256
查看次数

标签 统计

gnu-make ×1

makefile ×1

symlink ×1

unix ×1