Hello,

I don't understand why dependency checking works the way it does when
one of the dependencies of a target is built via a :MAKE: assertion. I
have included an example which shows the problem.

If the dependency (in this case src/hello.o) already exists at the time
the top level nmake is run, then the time stamp of the target (in this
case hello) is compared to that of the dependency prior to the :MAKE:,
not after it. The result is, if src/hello.o is out of date and needs
to be rebuilt, it is rebuilt, but hello is _not_ rebuilt on this nmake
run. On the next nmake run, src/hello.o is now newer than hello at the
start of the run, and so hello is rebuilt.

Here is the top level Makefile:

    $ cat Nmakefile
    /* Nmakefile
     *   
     * Why does hello only get updated on a subsequent nmake run if src/hello.o
     * gets updated on this run?
     */  

    hello : src/hello.o
            $(CC) -o $(<) $(>)

    src/hello.o :MAKE: src 

And here is the subdirectory Makefile:

    $ cat src/Nmakefile
    /* src/Nmakefile
     */  

    hello.o :

Here is what happens when a change to src/hello.c causes src/hello.o
to be out of date. hello is not rebuilt following the rebuilding of
src/hello.o, but only on the following nmake run:

    $ nmake
    src:
    $ touch src/hello.c
    $ nmake
    src:
    + cc -O -I- -c hello.c
    $ nmake
    src:
    + cc -o hello src/hello.o

Is there a way to cause nmake to evaluate whether hello needs to be
rebuilt _after_ having rebuilt src/hello.o? Or am I coming at this
problem from the wrong direction?

Alexander
_______________________________________________
ast-users mailing list
[email protected]
https://mailman.research.att.com/mailman/listinfo/ast-users

Reply via email to