'nmake'

Eduardo Krell ekrell at hector.UUCP
Tue May 23 09:54:58 AEST 1989


In article <2060 at unisoft.UUCP> sparker at unisoft.UUCP (Steve Parker) writes:

>> As I said before, I don't know whether the new nmake will be offered
>> through the Toolchest or with SVR4, but the bottom line is that it
>> will.
>
>I am truly sorry to hear that.  I'm convinced it's the wrong tool for the job,
>encourages complicated solutions to problems, and has extremely poor compatiblity
>with its predecessor.

I don't understand.  What is it that bothers you: that nmake will be offered
and people will have a chance of using it?  You have a right not to use it
if you chose not to, but why shouldn't others get to decide if they like it
or not?

>The whole reason 'make' was a win in the first place was that it found a simple
>paradigm for describing how to regenerate software:  Files depend upon one another,
>and a simple set of steps record how to bring a file up to date.  Can anyone state
>in one or two sentences what nmake's paradigm is?  I sure can't.  There are file
>dependencies, state variable dependencies, attributes, ...  Ugh.

The need for these is that the make model is too simplistic: As I said
before, time stamps are not good enough to determine when a file should
be recompiled. When projects get too big, the makefiles get too complicated
and one is never 100% sure that make is recompiling all the files it REALLY
needs to and that it's not compiling too much.

On a small system, this might not make a big difference, but on a big
project where building the system takes a day of CPU time or more,
it's critical that this process be as efficient and as reliable as
possible.  Many of the projects using nmake now have cut their building
times because back when they used make, they had to rebuild everything
from scratch as they didn't trust make to do the right thing.

>	"As a testimony to the strength of this metalanguage, most new make
>	features and ideas have resulted in changes to the standard builtin rules
>	(written as a makefile) rather than in changes to the [nmake source]."

But what bothers you: that he did succeed in doing that? Are you annoyed
that someone can write a general purpose make engine which can be tailored
with higher level rules?

>Of course, all it does is essentially:
>
>	egrep '^#[ \t]*include'
>
>This does the wrong thing for some #ifdef'd source.  It still makes nmake slower
>than it need be, and wrong to boot!?!?

First of all, you can turn off source scanning if you want. And, anyway,
source files are rescanned only if they've changed since the last time
they were compiled, so you're clearly exaggerating the overhead.

And it doesn't do the wrong thing for #include's within #ifdef's:
it knows about them and it doesn't require the included file to
be there.

>And even if it _were_ completely free, unsupported software, there is nothing wrong
>with calling a spade a spade.  People are doing exactly this.  Or are there hoards
>of people who are happy and pleased with nmake out there?

Depends on the version of nmake: you're talking about a 4 year old piece
of code which we haven't been allowed to update. nmake 2.0 is a complete
rewrite and it's being used by lots of internal AT&T projects, all sizes.

I've rewritten the Unix kernel makefiles to a single nmake makefile.
It went down from about 40 pages of makefile to 1.5 and the system
can be recompiled much faster now.

>(The only benefit I derived from nmake was the "-j",
>parallel job option.  All the rest of the 'features' did not do anything constructive,
>or at least not constructive enough to justify itself.)

How about the use of a co-shell so that individual actions don't need
to spawn new shells all the time?
How about having compiled makefiles so that they don't need to be reparsed
every time you run make? How about binding of source and header files so
that if you add a different include or source directory which changes the
binding of some source/header file names, nmake will recompile whatever
needs to? How about using a state variable so that if you change its
value in the Makefile, all the files which use that symbol will be
recompiled (with the new -D flag)? How about using .SOURCE rules
to specify lists of directories where different kinds of source and
header files are and let nmake generate the right -I flags and compile
source from those directories?

The list could go on, but I've already made the point.
    
Eduardo Krell                   AT&T Bell Laboratories, Murray Hill, NJ

UUCP: {att,decvax,ucbvax}!ulysses!ekrell  Internet: ekrell at ulysses.att.com



More information about the Comp.unix.wizards mailing list