Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 2 Feb 1999 16:20:39 +1030
From:      Greg Lehey <grog@lemis.com>
To:        Kent Stewart <kstewart@3-cities.com>
Cc:        "freebsd-questions@FreeBSD.org" <freebsd-questions@FreeBSD.ORG>
Subject:   Re: Make File Generator
Message-ID:  <19990202162039.U76680@freebie.lemis.com>
In-Reply-To: <36B68FF4.48331073@3-cities.com>; from Kent Stewart on Mon, Feb 01, 1999 at 09:41:08PM -0800
References:  <36B5FF82.D89176C1@3-cities.com> <19990202094916.R71384@freebie.lemis.com> <36B68FF4.48331073@3-cities.com>

next in thread | previous in thread | raw e-mail | index | archive | help
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 <grin>.
>>> 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



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?19990202162039.U76680>