gmake && file time precision of 1 second
Stefan Esser
se at freebsd.org
Mon Oct 13 13:06:47 UTC 2014
Am 13.10.2014 um 11:20 schrieb Matthias Apitz:
>
> Hello,
>
> I have a large project where a shell script fires up
> gmake runs in subdirs as:
>
> for dir in src norm print ....; do
> cd $dir
> gmake
> cd ..
> done
>
> in each subdir *.c are compiled to *.o and the resulting *.o are ar'ed
> into all the same lib.a; based on normal Makefile rules like:
>
> SRCS = f1.c f2.c
> OBJS = $(SRCS:.c=.o)
>
> .c.o:
> $(CC) -c ... $*.c
>
> lib.a:: $(OBJS)
> $(AR) $@ $(OBJS)
>
>
> after moving to a faster server it turned out that gmake sometimes forget
> to ar the *.o into the lib; I investigated it and it turned out that the
> *.o files have the same modification time (in seconds) as the target
> lib.a (which was produced/updated in the last directory worked on) and
> gmake thinks that the lib.a is uptodate.
>
> Any idea how to address this in the Makefiles?
>
> Well I could place (and it works) a 'sleep 1' into the loop, but I think
> that there is some better way.
Could this be a solutionn for you:
$ sysctl -d vfs.timestamp_precision
vfs.timestamp_precision: File timestamp precision (0: seconds, 1: sec +
ns accurate to 1/HZ, 2: sec + ns truncated to ms, 3+: sec + ns (max.
precision))
Beware: This is a global variable, higher resolution timestamps are
not supported on all filesystems, and not all programs check for the
sub-second part of the timestamp value ...
Regards, STefan
More information about the freebsd-hackers
mailing list