[comp.lang.c] MSC 5.1 make

ryan@sjuphil.uucp (Patrick M. Ryan) (12/15/89)

     Is it just my imagination or is the version of Make which comes
with MSC 5.1 a pitiful imitation of the real Unix Make?  There are some
pretty fundamental things it doesn't seem to do, such as assuming
'makefile' as the default makefile name.  The built-in macros are
few and far between.  It insists on making the objects in the order
in which they appear in the file instead of letting the user specify
an object to be made and starting the dependency checking from there.
     I have seem PD implementations of Make on PCs which work exactly the
same as the Unix make.  Why did Microsoft limit their version so much?
     I have heard that MSC 6.0 is due out sometime in the near future.
Has anyone heard of any plans to rectify this situation?

Thanks

-- 
pat ryan
  ryan%sjuphil.sju.edu@bpa.bell-atl.com
  {princeton|rutgers|liberty|bpa}!sjuphil!ryan
  pmr@bootes.gsfc.nasa.gov

kaleb@mars.jpl.nasa.gov (Kaleb Keithley) (12/16/89)

In article <1989Dec15.021527.18711@sjuphil.uucp> ryan@sjuphil.uucp (Patrick M. Ryan) writes:
>
>     Is it just my imagination or is the version of Make which comes
>with MSC 5.1 a pitiful imitation of the real Unix Make?  There are some
>pretty fundamental things it doesn't seem to do, such as assuming
>'makefile' as the default makefile name.  The built-in macros are
>few and far between.  It insists on making the objects in the order
>in which they appear in the file instead of letting the user specify
>an object to be made and starting the dependency checking from there.
>     I have seem PD implementations of Make on PCs which work exactly the
>same as the Unix make.  Why did Microsoft limit their version so much?
>     I have heard that MSC 6.0 is due out sometime in the near future.
>Has anyone heard of any plans to rectify this situation?
>

I can't speak for Microsoft's plans for MSC 6.0, but if you get QuickC 2.0 or
2.01, it comes with NMAKE.EXE (New Make?) that more closely emulates UN*X make.

If I had to guess, I think M'soft will distribute NMAKE with 6.0 whenever it
hits the streets.



Chewey, get us outta here!
                 
kaleb@mars.jpl.nasa.gov             (818)354-8771
Kaleb Keithley

fredex@cg-atla.UUCP (Fred Smith) (12/16/89)

In article <1989Dec15.021527.18711@sjuphil.uucp> ryan@sjuphil.uucp (Patrick M. Ryan) writes:
>
>     Is it just my imagination or is the version of Make which comes
>with MSC 5.1 a pitiful imitation of the real Unix Make?  
>     I have seem PD implementations of Make on PCs which work exactly the
>same as the Unix make.  Why did Microsoft limit their version so much?


No it is NOT your imagination. Microsoft's Make utility is largely a wortless
piece of code--good for nothing except taking up disk space (unless you work
from within QuickC, which needs the damn thing for doing builds).

There have been reasonably good Make clones around for a long time. I saw one
at least four  years ago which was shipped with Mark Williams C compiler (to say
nothing of several commercial makes and a bunch of shareware/PD ones).

Fred

Bob.Stout@p6.f506.n106.z1.fidonet.org (Bob Stout) (12/16/89)

MSC 6.0 wil include NMAKE rather than MS's old make. NMAKE is currently  
supplied with all MS languages released since and including QC 2.0. It's much  
better (but then what isn't?) 

sdawalt@wright.EDU (Shane Dawalt) (12/17/89)

in article <1989Dec15.021527.18711@sjuphil.uucp>, ryan@sjuphil.uucp (Patrick M. Ryan) says:
> 
>      Is it just my imagination or is the version of Make which comes
> with MSC 5.1 a pitiful imitation of the real Unix Make?

  I do not use MSC, however, I have heard plenty of talk about MSC's
make vs. Borland's make.  (Borland follows the Unix convention.)  There
are many people wondering why their MSC make files will not produce the
correct results under Borland's make.  I suspect that Microsoft may have
relaxed the strict rule flow of Unix so that non-Unix users could simply
list their files in any order and make would run without problems ... then
you have the Unix people wondering why MSC's make is so "strange."  :-)

  Shane

sdawalt@cs.wright.edu

martin@mwtech.UUCP (Martin Weitzel) (12/18/89)

In article <884@thor.wright.EDU> sdawalt@wright.EDU (Shane Dawalt) writes:
>in article <1989Dec15.021527.18711@sjuphil.uucp>, ryan@sjuphil.uucp (Patrick M. Ryan) says:
>> 
>>      Is it just my imagination or is the version of Make which comes
>> with MSC 5.1 a pitiful imitation of the real Unix Make?
>
>  I do not use MSC, however, I have heard plenty of talk about MSC's
>make vs. Borland's make.  (Borland follows the Unix convention.)  There
>are many people wondering why their MSC make files will not produce the
>correct results under Borland's make.  I suspect that Microsoft may have
>relaxed the strict rule flow of Unix so that non-Unix users could simply
             ^^^^^^^^^^^^^^^^^^^^^^^^
>list their files in any order and make would run without problems ... then
 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Sorry, I also don't know MSC, but I don't quite understand this: Under
UNIX I *can* list my rules in any order that I want! The places, where
the order matters, are in the '.SUFFIXES:'-line and in a few special
cases the order of the dependencies after a ':' is important.

In both cases it is essential that the order matters, because 
the order resolves some ambiguities, that would otherwise exist.

>you have the Unix people wondering why MSC's make is so "strange."  :-)

Or does the smiley face mean, that I should reverse the meaning
of your words, to put it right?

-- 
<<< MW -- email: see header -- voice: 49-(0)6151-6 56 83 >>>

hollen@eta.megatek.uucp (Dion Hollenbeck) (12/18/89)

From article <8176@cg-atla.UUCP>, by fredex@cg-atla.UUCP (Fred Smith):
> In article <1989Dec15.021527.18711@sjuphil.uucp> ryan@sjuphil.uucp (Patrick M. Ryan) writes:
>>
>>     Is it just my imagination or is the version of Make which comes
>>with MSC 5.1 a pitiful imitation of the real Unix Make?  
>>     I have seem PD implementations of Make on PCs which work exactly the
>>same as the Unix make.  Why did Microsoft limit their version so much?
> 
> 
> No it is NOT your imagination. Microsoft's Make utility is largely a wortless
> piece of code--good for nothing except taking up disk space (unless you work
> from within QuickC, which needs the damn thing for doing builds).
> 
> There have been reasonably good Make clones around for a long time. I saw one
> at least four  years ago which was shipped with Mark Williams C compiler (to say
> nothing of several commercial makes and a bunch of shareware/PD ones).
> 
> Fred


Speaking of GOOD Make utilities, may I recommend OPUS Make by Don Kneller.
This is an updated, improved, commercial version of his previous
NDMAKE.  NDMAKE is shareware and I have been using it for about
2 years now.  I have moved many makefiles over from UNIX and they run
without modification.  NDMAKE has additional features not found in
UNIX make and OPUS has many more.  This is a solid product worth
having if you do any developoment which is at all real (as opposed
to playing at home for fun and learning).  

You can contact Donald Kneller at  ...ucbvax!ucsfcgl!kneller (at
least this is the last address I had for him).

Just a satsified user who could not do without NDMAKE.  The product
is wonderful and support has been grand and timely.  Don't pass this 
one up.

	Dion Hollenbeck             (619) 455-5590 x2814
	Megatek Corporation, 9645 Scranton Road, San Diego, CA  92121

        uunet!megatek!hollen       or  hollen@megatek.uucp

fredex@cg-atla.UUCP (Fred Smith) (12/19/89)

In article <884@thor.wright.EDU> sdawalt@wright.EDU (Shane Dawalt) writes:
>                                       I suspect that Microsoft may have
>relaxed the strict rule flow of Unix so that non-Unix users could simply
>list their files in any order and make would run without problems ... then
>you have the Unix people wondering why MSC's make is so "strange."  :-)
>
>  Shane
>
>sdawalt@cs.wright.edu



It seems to me, if I understand you, that you have it backwards. in Unix's make
you can list the targets in any old order you please, and as long as you tell
make which target to build (and define properly the dependencies) it will know
how to do so. It either builds, or acts as if it had built, a dependency tree
which, once built, can simply be traversed in-order, building each target as
necessary. When done all things required for building the main target will have
been built,so  that it can then build said target.

What MSC's make does is to move the dependency order work from the program
to the PROGRAMMER. It is necessary for the objects to be listed in the makefile
top to bottom in dependency order. If the first listed target depends on the
third one, then you are out of luck, because the stupid thing doesn't know how
to build the third one until it has completely finished processing the first
`and second ones. It then will NOT go back and do the first, because it is simply
traversing the makefile in first to last order.

Fred

u-gclapp%ug.utah.edu@cs.utah.edu (Glenn Clapp) (12/19/89)

Why the heck would anyone want to use the stripped down and funky MSC 
make?  YUK Big Time!  

I got so fed up with the limitations of MSC 5.1 make that I switched to
nmake.  What the heck is nmake you ask?  Well, it is a *full blown*
make that comes with (now get this) Microsoft's QuickC 2.0

Now put that on your hard disk and smoke it!

-Glenn

dave@motto.UUCP (David Brown) (12/20/89)

My biggest problem is not with Microsoft's make, per se, but with the
command line limits on utilities such as the linker.  What I would
like to do is something like

	OBJS = file1.obj \
	       file2.obj \
		 ...
	       file200.obj

		...

	prog.exe: $(OBJS)
		link $(OBJS), prog, ...

However, even if I get around the 512 byte limit in macros by having
multiple macros (OBJ1, OBJ2, ...), link won't accept so long a command
line.  I'm forced to keep a separate response file for the link, which
means maintaining another list of all the object names.

I tried the PDMAKE that was posted here recently.   It solves the macro
limit problem, but I'm still stuck with the link command line limit.

What do the rest of you do if you have a lot of object files to make?

 -----------------------------------------------------------------------------
|  David C. Brown	    |  uunet!mnetor!motto!dave			      |
|  Motorola Canada, Ltd.    |  416-499-1441 ext 3708			      |
|  Communications Division  |  Disclaimer: Motorola is a very big company     |
 -----------------------------------------------------------------------------

rs@tnoibbc.UUCP (Rob Schoenmaker) (12/20/89)

In article <78@motto.UUCP> dave@motto.UUCP (David Brown) writes:
>However, even if I get around the 512 byte limit in macros by having
>multiple macros (OBJ1, OBJ2, ...), link won't accept so long a command
>line.  I'm forced to keep a separate response file for the link, which
>means maintaining another list of all the object names.
>
>I tried the PDMAKE that was posted here recently.   It solves the macro
>limit problem, but I'm still stuck with the link command line limit.
>
>What do the rest of you do if you have a lot of object files to make?
>

I use Polytron's PolyMake which can generate a response file for you,
like this :

test.exe:	$(OBJS)
		link $(LFLAGS) <@<
		$[s," +\n",$**]
		$@

		$(LIBS)
<


-- 
Rob Schoenmaker: TNO - IBBC                   USENET : rs@tnoibbc
               : lange kleiweg 5              UUCP   : ..!hp4nl!tnoibbc!rs
               : 2288 GH  Rijswijk
               : the Netherlands              VOICE  : +31 15 606410

sdawalt@wright.EDU (Shane Dawalt) (12/21/89)

in article <8178@cg-atla.UUCP>, fredex@cg-atla.UUCP (Fred Smith) says:
> 
> In article <884@thor.wright.EDU> sdawalt@wright.EDU (Shane Dawalt) writes:
>>                                       I suspect that Microsoft may have
>>relaxed the strict rule flow of Unix so that non-Unix users could simply
                               ^^^^^^^
>>list their files in any order and make would run without problems ... then
>>you have the Unix people wondering why MSC's make is so "strange."  :-)
>>
>>  Shane
>>
>>sdawalt@cs.wright.edu
> 
> What MSC's make does is to move the dependency order work from the program
> to the PROGRAMMER. It is necessary for the objects to be listed in the makefile
> top to bottom in dependency order.

  Perhaps I did not choose the best wording (I can almost see everyone
nodding their heads), but when I stated "strict rule flow of Unix [make],"
the implication was a recursive, top-down ordering of rules in the makefile as
is required for Unix make.  Microsoft make starts at the top and works down the
rule list one at a time.  That's terrific for non-Unix people; just list the
files in the makefile (source first, executable last) and ya have it made.  On
the other hand, the concept of a make utility is not realized with this type
of makefile format.

  Shane

email: sdawalt@cs.wright.edu

Bob.Stout@p6.f506.n106.z1.fidonet.org (Bob Stout) (12/21/89)

In an article of <19 Dec 89 19:53:27 GMT>, (David Brown) writes:

 >My biggest problem is not with Microsoft's make, per se, but with the
 >command line limits on utilities such as the linker.
 >
 >What do the rest of you do if you have a lot of object files to make?

  The technique I sometimes use when compiling libraries (i.e. it only works  
if all the objects are together in one subdirectory by themselves) is to run a  
program which generates a linker response file for me by listing all the  
available .OBJ's and adding the extra verbage expected by the linker. This is  
the same technique used in the CXL windowing library, although I wrote my own  
for inclusion with my Microsoft library. If you'd like I can post the source. 

efowler@milton.acs.washington.edu (Eric Fowler) (01/21/90)

I have been trying to write a simple program that reads strings from 
an open file, then sorts them into a binary tree structure(this just for 
own curiosity, not for any good reason:-)). The procedure checks each string
against the string in the appropriate field at the appropriate node, then
(as appropriate)either increments an integer field and returns control(the
strings matched), moves "left"/"right" (one string is smaller, the pointer 
that way is not NULL), or sets the pointer to the value returned by a function 
that mallocs memory for the structure and the string field contained therein, 
puts the input string into the string field, and returns a pointer to the new
structure. Naturally, the function which compares the strings, checks the 
pointers, and calls the function to return the pointer to the new structure is
recursive. 
	Now, when this is called, it runs perfectly for a variable length of 
time, that is, it varies according to:(1)whether it is on a mainframe or PC;
(longer on the PC, sometimes terminating successfully);(2)whether the output
is directed to the screen or a file(longer if it goes to a file);(3)which file
it is fed for input. All of the input files are ASCII text files, of modest 
size. Given very small files, it will terminate normally at EOF. Given larger
files, it dies, usually with an error indicating a memory problem(DYNIX:
"segmentation error:core dumped", BSD Tahoe:"bus error", DOS said something 
like this too). Furthermore, the dbx debugger accuses "malloc" of forcing 
an exit. It is clear even to me that there is a memory allocation problem here
(no kidding! :-)). What is not clear is what is going wrong, and how I can 
fix it. No way is the stack getting too big-the files are not that large, and 
it will go much further with some input files than others, that is, it will 
build a tree to depth 8 or 10 with one input file, but bomb at depth 2 or 3
with others. (Any given file with the same output redirection generates id-
entical output every time it is run, however). Also unclear is how the screen 
I/O can screw up the stack. It is apparent that the stack is being corrupted, 
but I don't know how. Any help appreciated. Thanks. =Eric