PBMake runs from a batch file, because it rewrites the batch file
on the fly, and then executes it. Once the batch file is written,
PBMake is done executing, and the batch file takes over.

MAKE.BAT kicks off the process by calling PBMake in the second
line. PBMake then reads in your script, determines what it needs
to do, and rewrites MAKE.BAT.

Once you see the actual process of compiling and linking, you are
seeing the batch file, MAKE.BAT, in action.

You can get an education about this by typing:

MAKE MYPROG /ALL

and then viewing the contents of MAKE.BAT. You will see that
MAKE.BAT contains everything it takes to build your entire
project. Now, once everything is freshly built, run the same
command again, but without the /ALL command.

PBMake will see that nothing needs to be done, and will rewrite
MAKE.BAT to reflect this. Now, veiw MAKE.BAT again.

See the difference?

PBMake makes use of a little known trick in DOS. Batch files have
no idea what is in them even after they are running. DOS keeps
track of what the last line was that executed, and when that
process is finished, DOS moves to that line + 1. PBMake has
rewritten lines 3 - n with the new process. DOS is fooled and
executes the new batch lines. The result is no memory overhead.

This is the basis for many network and hard disk menuing systems.