From owner-freebsd-questions Mon Feb 1 21:50:56 1999 Return-Path: Received: (from majordom@localhost) by hub.freebsd.org (8.8.8/8.8.8) id VAA15126 for freebsd-questions-outgoing; Mon, 1 Feb 1999 21:50:56 -0800 (PST) (envelope-from owner-freebsd-questions@FreeBSD.ORG) Received: from allegro.lemis.com (allegro.lemis.com [192.109.197.134]) by hub.freebsd.org (8.8.8/8.8.8) with ESMTP id VAA15096 for ; Mon, 1 Feb 1999 21:50:48 -0800 (PST) (envelope-from grog@freebie.lemis.com) Received: from freebie.lemis.com (freebie.lemis.com [192.109.197.137]) by allegro.lemis.com (8.9.1/8.9.0) with ESMTP id QAA21975; Tue, 2 Feb 1999 16:20:43 +1030 (CST) Received: (from grog@localhost) by freebie.lemis.com (8.9.2/8.9.0) id QAA98227; Tue, 2 Feb 1999 16:20:39 +1030 (CST) Date: Tue, 2 Feb 1999 16:20:39 +1030 From: Greg Lehey To: Kent Stewart Cc: "freebsd-questions@FreeBSD.org" Subject: Re: Make File Generator Message-ID: <19990202162039.U76680@freebie.lemis.com> References: <36B5FF82.D89176C1@3-cities.com> <19990202094916.R71384@freebie.lemis.com> <36B68FF4.48331073@3-cities.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii X-Mailer: Mutt 0.95.1i In-Reply-To: <36B68FF4.48331073@3-cities.com>; from Kent Stewart on Mon, Feb 01, 1999 at 09:41:08PM -0800 WWW-Home-Page: http://www.lemis.com/~grog Organization: LEMIS, PO Box 460, Echunga SA 5153, Australia Phone: +61-8-8388-8286 Fax: +61-8-8388-8725 Mobile: +61-41-739-7062 Sender: owner-freebsd-questions@FreeBSD.ORG Precedence: bulk X-Loop: FreeBSD.ORG On Monday, 1 February 1999 at 21:41:08 -0800, Kent Stewart wrote: > Greg Lehey wrote: >> On Monday, 1 February 1999 at 11:24:50 -0800, Kent Stewart wrote: >>> On most of the Unix systems I have used there is a make generator for >>> Fortran. I don't see such a product on FreeBSD for f77. I have a large >>> program, i.e., more than 300 modules, that was last used on a Cray. The >>> sources as provided do not contain a makefile. I would like to try and build >>> it on FreeBSD but would hate to have to create the makefile by hand . >>> Is there something like mkmf that will generate a makefile. >> >> Not that I know of. Have you tried gmake? It knows about Fortran >> programs. You probably need very little to make a usable Makefile. >> For example, if you create a single executable out of your 300 .f >> programs, you might do: >> >> $ ls *.f | xargs | sed 's/^/PROG: /' > Makefile >> >> Substitute the name of your program for PROG. > > I had thought about gmake. The gmake manual is intimdating. It is easy to > modify something that is generated and works. Creating the makefile from > scratch is something else. I also assumed that I needed to supply parameters > to the veraious steps. Your suggested sequence was so simple that it was > worth it to see what it would do. The problem is that the main program > overwhelms the table and kills the build on the first module and continues > on. The message I get is that I have to supply -Nn802 to f77 for the main > program. I don't think it would matter if the table was extended for all of > the modules. I didn't capture the output; however, the defaults appear to > work for everything else. The other thing is that this process isn't > generating object output and it takes about 45 minutes to compile > everything. That becomes a serious problem because it recompiles everything, > everytime. I'm not sure I understand this, but it doesn't sound right. What does your Makefile look like? > A make generator should create something that looks like > > stuff ... > > main.o : main.f > f77 -? main.f > link1.o : link1.f > f77 -? link1.f No, a Makefile generator should *never* generate something like that unless each and every module needs a different command, which would be very poor style. You can replace all of this stuff with: .f.o: f77 -? $< This has the advantage that it will still work if you add modules to the directory. > and etc. for all of the functions and subroutines. This depends on a ".o" > being created for each compiled module, which reduces the recompiles to the > changed module. I haven't seen an object file. The basic process is > complicated because f77 isn't a real compiler. It calls f2c which takes the > FORTRAN code and produces c code. Then, it compiles the c code with > gcc. That shouldn't make any difference. > A simple compile and make with f77 produces nothing but the a.out. OK, I understand that. > I am really trying to make this program run on a PC where I have to > cope with 32 bit floats and integers instead of 64 bit - > everythings. When you say a PC, do you mean Microsoft? FreeBSD runs on PCs, but it supports 64 bit doubles (I thought Microsoft did too). To get object files for each source file, try making the Makefile like this: $ ls *.f | sed 's/.f$/.o/ | xargs | sed 's/^/PROG: /' > Makefile This will make the program dependent on the objects and not on the sources. Greg -- When replying to this message, please copy the original recipients. For more information, see http://www.lemis.com/questions.html See complete headers for address, home page and phone numbers finger grog@lemis.com for PGP public key To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-questions" in the body of the message