У меня проблема со временем модификации в GNU make 3.81.
Мой Makefile использует данные, смонтированные с удаленного сервера, который по какой-то неизвестной мне причине установил Время модификации файлов, установленных вдалекое будущее (в следующее столетие).
Сначала Makefile создает символическую ссылку на удаленный файл «из будущего» в локальном каталоге, а затем на основе этого файла запускает несколько сценариев, которые все генерируют некоторый выводфайлы.
Теперь, когда я хочу перезапустить «сделать все» после того, как он был прерван, чтобы получить все мои выходные файлы, он не будет перезапущен с последним сгенерированным выходным файлом (скажем, из сценария № 3).), но вместо этого он восстанавливает все с самого начала, так как он замечает, что первый файл (тот, в котором я символически связал файл «из будущего») является более новым.
Есть ли опция, чтобы сказать make, чтобы взятьвремя модификации самой символьной ссылки, а не время модификации цели символической ссылки?
Пример
Вот минимальный рабочий пример, восстанавливающий проблему:
Настройка папки и файлов:
mkdir symlinkmake
cd symlinkmake
echo $PWD > futurefile.txt
# set file modification time to the future
touch -t 212111111111 futurefile.txt
Содержимое файла Makefile:
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
Теперь запустите make all
и удалите второй выходной файл.Затем перезапустите make.Поскольку первый выходной файл уже существует, необходимо создать только второй файл.Но поскольку futurefile.txt
новее, чем любой другой файл, будет также сгенерирован первый выходной файл:
make all
rm second_output.txt
make all
На моей машине вывод выглядит так:
$ ls
Makefile futurefile.txt symlink.txt
$ make all
make: Warning: File `symlink.txt' has modification time 3.3e+09 s in the future
cut -f1 -d"/" symlink.txt > first_output.txt
wc first_output.txt > second_output.txt
make: warning: Clock skew detected. Your build may be incomplete.
$ rm second_output.txt
$ make all
make: Warning: File `symlink.txt' has modification time 3.3e+09 s in the future
cut -f1 -d"/" symlink.txt > first_output.txt
wc first_output.txt > second_output.txt
make: warning: Clock skew detected. Your build may be incomplete.