Makefile не обновляет объекты

Несмотря на то, что я следую онлайн-руководству GNU make шаг за шагом, проблема с make-файлами все еще озадачивает меня.
Я работаю над очень простым make-файлом:

OBJ = main.o funz.o

main :  $(OBJ)
    gfortran -g -o main $(OBJ)

funz.o : funz.for
    gfortran -g -c funz.for
main.o : main.for
    gfortran -g -c main.for

clean : 
    rm main.o funz.o

Согласно тому, что я узнал о make-файлах, funz.for является необходимым условием для funz.o. Каждый раз, когда я меняю исходный код funz.for, make должен обновить funz.o и снова связать его с main. Но всякий раз, когда я запускаю make, мне говорят, что main обновлена ​​и не распознает изменения в funz.for. Этот вопрос, который я обнаружил, связан с такая же проблема, но не решает мою, так как я думаю, что мои предварительные условия сформулированы правильно.
Я что-то упустил?

ОБНОВЛЕНИЕ 1

Как спросил Этан Рейснер, вот результат make -rRd:

This program built for x86_64-redhat-linux-gnu
Reading makefiles...
Reading makefile `Makefile'...
Updating makefiles....
 Considering target file `Makefile'.
  Looking for an implicit rule for `Makefile'.
  No implicit rule found for `Makefile'.
  Finished prerequisites of target file `Makefile'.
 No need to remake target `Makefile'.
Updating goal targets....
Considering target file `main'.
  Considering target file `main.o'.
    Considering target file `main.for'.
     Looking for an implicit rule for `main.for'.
     No implicit rule found for `main.for'.
     Finished prerequisites of target file `main.for'.
    No need to remake target `main.for'.
   Finished prerequisites of target file `main.o'.
   Prerequisite `main.for' is older than target `main.o'.
  No need to remake target `main.o'.
  Considering target file `funz.o'.
    Considering target file `funz.for'.
     Looking for an implicit rule for `funz.for'.
     No implicit rule found for `funz.for'.
     Finished prerequisites of target file `funz.for'.
    No need to remake target `funz.for'.
   Finished prerequisites of target file `funz.o'.
   Prerequisite `funz.for' is older than target `funz.o'.
  No need to remake target `funz.o'.
 Finished prerequisites of target file `main'.
 Prerequisite `main.o' is older than target `main'.
 Prerequisite `funz.o' is older than target `main'.
No need to remake target `main'.
make: `main' is up to date.

И вот результат stat funz.o funz.for; touch funz.for; stat funz.o funz.for; make -rRd

  File: `funz.o'
  Size: 3176            Blocks: 8          IO Block: 4096   regular file
Device: 801h/2049d      Inode: 58197897    Links: 1
Access: (0664/-rw-rw-r--)  Uid: (  505/ lorenzo)   Gid: (  505/ lorenzo)
Access: 2015-11-19 16:23:06.200737262 -0500
Modify: 2015-11-19 16:23:06.192737262 -0500
Change: 2015-11-19 16:23:06.192737262 -0500
  File: `funz.for'
  Size: 129             Blocks: 8          IO Block: 4096   regular file
Device: 801h/2049d      Inode: 58196947    Links: 1
Access: (0644/-rw-r--r--)  Uid: (  505/ lorenzo)   Gid: (  505/ lorenzo)
Access: 2015-11-19 16:23:06.183737262 -0500
Modify: 2015-11-19 16:23:06.174737262 -0500
Change: 2015-11-19 16:23:06.174737262 -0500
  File: `funz.o'
  Size: 3176            Blocks: 8          IO Block: 4096   regular file
Device: 801h/2049d      Inode: 58197897    Links: 1
Access: (0664/-rw-rw-r--)  Uid: (  505/ lorenzo)   Gid: (  505/ lorenzo)
Access: 2015-11-19 16:23:06.200737262 -0500
Modify: 2015-11-19 16:23:06.192737262 -0500
Change: 2015-11-19 16:23:06.192737262 -0500
  File: `funz.for'
  Size: 129             Blocks: 8          IO Block: 4096   regular file
Device: 801h/2049d      Inode: 58196947    Links: 1
Access: (0644/-rw-r--r--)  Uid: (  505/ lorenzo)   Gid: (  505/ lorenzo)
Access: 2015-11-19 16:23:47.478737151 -0500
Modify: 2015-11-19 16:23:47.478737151 -0500
Change: 2015-11-19 16:23:47.478737151 -0500
GNU Make 3.81
Copyright (C) 2006  Free Software Foundation, Inc.
This is free software; see the source for copying conditions.
There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A
PARTICULAR PURPOSE.

This program built for x86_64-redhat-linux-gnu
Reading makefiles...
Reading makefile `Makefile'...
Updating makefiles....
 Considering target file `Makefile'.
  Looking for an implicit rule for `Makefile'.
  No implicit rule found for `Makefile'.
  Finished prerequisites of target file `Makefile'.
 No need to remake target `Makefile'.
Updating goal targets....
Considering target file `main'.
  Considering target file `main.o'.
    Considering target file `main.for'.
     Looking for an implicit rule for `main.for'.
     No implicit rule found for `main.for'.
     Finished prerequisites of target file `main.for'.
    No need to remake target `main.for'.
   Finished prerequisites of target file `main.o'.
   Prerequisite `main.for' is older than target `main.o'.
  No need to remake target `main.o'.
  Considering target file `funz.o'.
    Considering target file `funz.for'.
     Looking for an implicit rule for `funz.for'.
     No implicit rule found for `funz.for'.
     Finished prerequisites of target file `funz.for'.
    No need to remake target `funz.for'.
   Finished prerequisites of target file `funz.o'.
   Prerequisite `funz.for' is newer than target `funz.o'.
  Must remake target `funz.o'.
gfortran -g -c funz.for
Putting child 0x0197ea80 (funz.o) PID 69914 on the chain.
Live child 0x0197ea80 (funz.o) PID 69914
Reaping winning child 0x0197ea80 PID 69914
Removing child 0x0197ea80 PID 69914 from chain.
  Successfully remade target file `funz.o'.
 Finished prerequisites of target file `main'.
 Prerequisite `main.o' is older than target `main'.
 Prerequisite `funz.o' is newer than target `main'.
Must remake target `main'.
gfortran -g -o main main.o funz.o
Putting child 0x019830d0 (main) PID 69917 on the chain.
Live child 0x019830d0 (main) PID 69917
Reaping winning child 0x019830d0 PID 69917
Removing child 0x019830d0 PID 69917 from chain.
Successfully remade target file `main'.

ОБНОВЛЕНИЕ 2

Я заметил кое-что действительно странное (которое я всегда упускал из виду): я редактирую свои исходные файлы через клиент WinSCP, и кажется, что после обновления моих исходных файлов время «последнего изменения» идет не так. Как вы можете видеть на этой картинке, даже если я изменил funz.for несколько минут назад, показанное время его последнего изменения необъяснимо на 6 часов раньше моего фактического времени (здесь почти 17:00).


person 19lorenz88    schedule 19.11.2015    source источник
comment
Можете ли вы показать вывод из make -rRd?   -  person Etan Reisner    schedule 19.11.2015
comment
@EtanReisner: конечно! Я обновил вопрос с информацией, которую вы просили.   -  person 19lorenz88    schedule 19.11.2015
comment
Prerequisite `funz.for' is older than target `funz.o'. make считает, что ваш исходный файл старше вашего объектного файла. Вы внесли в него изменения?   -  person Etan Reisner    schedule 19.11.2015
comment
@EtanReisner: да, я внес изменения в funz.for и сохранил исходный файл: но, тем не менее, make считает его более старым, чем funz.o, и считает, что нет необходимости обновлять main.   -  person 19lorenz88    schedule 19.11.2015
comment
Вы используете IDE, которая может автоматически компилироваться для вас или что-то в этом роде? Что выдает stat funz.o funz.for; touch funz.for; stat funz.o funz.for; make -rRd? (Чтобы проверить, правильно ли все работает.)   -  person Etan Reisner    schedule 19.11.2015
comment
@EtanReisner: я обновил вопрос!   -  person 19lorenz88    schedule 19.11.2015
comment
@EtanReisner: я заметил что-то странное с моими файлами. Я обновил вопрос, указав изображение моего клиента WinSCP.   -  person 19lorenz88    schedule 19.11.2015
comment
Есть ли разница в часовых поясах на вашем локальном компьютере и на сервере? Вы подключаетесь через sftp или scp?   -  person Etan Reisner    schedule 19.11.2015
comment
@EtanReisner: моя локальная машина и сервер находятся всего в одной комнате друг от друга. ;) Я подключаюсь через WinSCP, так что да, я полагаю, что обновляю файлы через SFTP или SCP. Хотя я определенно не специалист в этом. Возможно ли, что на моем локальном компьютере время отличается от удаленного?   -  person 19lorenz88    schedule 19.11.2015
comment
Это. Какое время и часовые пояса на каждой машине? И sftp и scp разные (и могут иметь значение здесь), так что вы на самом деле используете? (Проверьте информацию о подключении в winscp или попробуйте запустить новый и посмотрите, что говорит раскрывающийся список выбора.)   -  person Etan Reisner    schedule 19.11.2015
comment
@EtanReisner: набрав date, появится следующее время: gio 19 nov 2015, 17.29.43, EST. Зона EST – UTC-5; но я в Италии, часовой пояс которой UTC +1. Это может объяснить 6-часовой разрыв. Кажется, я столько всего не знал о своей рабочей станции! Я работаю с протоколом SCP: я проверил его в правом нижнем углу моей панели WinSCP.   -  person 19lorenz88    schedule 19.11.2015
comment
Значит, у вашего сервера очень неправильный часовой пояс? Вероятно, вам следует это исправить.   -  person Etan Reisner    schedule 19.11.2015
comment
@EtanReisner: Кажется, да. Я исправлю это прямо сейчас. Большое спасибо за ваше время и извините, что беспокою вас по такой глупости. Как выбрать лучший ответ? Могу ли я написать это сам или это зависит от вас?   -  person 19lorenz88    schedule 19.11.2015
comment
Я проголосовал за закрытие, так как не могу воспроизвести лично. Вы, конечно, можете исправить это, а затем написать ответ и принять его, если вы предпочитаете это вместо этого.   -  person Etan Reisner    schedule 19.11.2015
comment
@EtanReisner: хорошо, это не проблема. Я думал, что каждый вопрос должен заканчиваться каким-то формализованным ответом. Еще раз спасибо!   -  person 19lorenz88    schedule 19.11.2015
comment
На них следует ответить или закрыть/удалить, да. Оставаться в подвешенном состоянии нежелательно. Итак, ваш выбор, но я бы либо представил и принял ваш собственный ответ, либо проголосовал бы, чтобы согласиться с моим голосованием, которое не может воспроизвести (что, я полагаю, должно закрыть его автоматически).   -  person Etan Reisner    schedule 19.11.2015
comment
@EtanReisner: я не могу найти ни одного варианта голосования ... может быть, у меня недостаточно репутации? Я могу написать и принять свой собственный ответ позже.   -  person 19lorenz88    schedule 19.11.2015
comment
Хм... да, похоже, у вас может не хватить голосов, чтобы проголосовать за ваши собственные вопросы (хотя я не уверен, что понимаю, почему это сработает именно так).   -  person Etan Reisner    schedule 19.11.2015


Ответы (1)


Похоже, что удаленный компьютер, с которым я работаю, имеет другое время, чем локальный компьютер, поэтому разные временные метки и make-файл не работают.

person 19lorenz88    schedule 20.11.2015