X-Authentication-Warning: delorie.com: mail set sender to djgpp-bounces using -f From: "Thomas Tutone" Newsgroups: comp.os.msdos.djgpp References: Subject: Re: How can I create a makefile automatically? Lines: 90 X-Priority: 3 X-MSMail-Priority: Normal X-Newsreader: Microsoft Outlook Express 6.00.2800.1158 X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2800.1165 Message-ID: Date: Thu, 26 Feb 2004 20:01:14 GMT NNTP-Posting-Host: 12.77.20.8 X-Complaints-To: abuse AT worldnet DOT att DOT net X-Trace: bgtnsc05-news.ops.worldnet.att.net 1077825674 12.77.20.8 (Thu, 26 Feb 2004 20:01:14 GMT) NNTP-Posting-Date: Thu, 26 Feb 2004 20:01:14 GMT Organization: AT&T Worldnet To: djgpp AT delorie DOT com DJ-Gateway: from newsgroup comp.os.msdos.djgpp Reply-To: djgpp AT delorie DOT com "Anthony" wrote: > When I create a project which has several source files, libs etc, is there > an easy way to generate a makefile for it? I know I can run a gcc -MM for > each file and save output, add some optional entries for 'make release', > 'make debug', ... by hands. But may be there are some tools that can do it > for me? I know I can export makefile in RHIDE, but I'm looking for a kind of > command-line script that I can use in MultiEdit. As Mr. Broeker says, at the end of the day, makefile writing is an integral part of the job of creating a big multi-source program in C or C++. Having said that, there are a few things you can do to automate the process. First, as you note, RHIDE will export a make file. Similarly, VIDE, which in a prior message you indicated you used, generates make files which you can then modify to work with DJGPP without too much effort. At the very least, this gives you a base to work from. Second, and probably more usefully for your needs, you can write your makefiles so that they automatically regenerate their own dependencies. While you still have to write the glue, the make file will know what headers to include, etc., without your having modify the make file. The basic theory is that the makefile uses cpp -MM to generate the dependencies, which it saves to a separate file, then reads in that file to obtain the dependencies. Here's a web page that explains the technique (the owner of the website is one of the gnu make developers, so you'll find a lot of useful stuff on the website): http://make.paulandlesley.org/autodep.html Here's a very simple example (untested, from memory, so you will probably need to fiddle with it to get it to work): # autodependency generating makefile CXX = gxx CXXFLAGS = -g -Wall -W -pedantic SRCS= main.cpp scanner.cpp parser.cpp \ environ.cpp native.cpp prim.cpp all: intrpret #get the objs OBJS = $(SRCS:.cpp=.o) #Main Target intrpret: $(OBJS) $(CXX) $(OBJS) -o $@.exe depend.m: $(SRCS) makefile $(CXX) $(CXXFLAGS) -MM $(SRCS) > depend.m #include the dependency file include depend.m # end of example makefile The idea is that this makefile will regenerate the dependencies if any source file or the makefile itself is modified. A warning: It sounds like you expect to run the makefile from multiedit. I don't use multiedit, but my advice from before stands: DJGPP and windows programs do not interact well. I would be surprised if multiedit can successfully compile DJGPP programs from within multiedit. You'll probably find that, as I recommended, you can use multiedit to do your editing, but you will still have to call make from the command line. Best regards, Tom