Path: utzoo!attcan!utgpu!jarvis.csri.toronto.edu!mailrus!uflorida!haven!adm!xadmx!rbj@dsys.ncsl.nist.gov From: rbj@dsys.ncsl.nist.gov (Root Boy Jim) Newsgroups: comp.unix.questions Subject: Help with Makefile Message-ID: <20767@adm.BRL.MIL> Date: 1 Sep 89 16:09:39 GMT Sender: news@adm.BRL.MIL Lines: 60 ? From: Micky Liu ? I am trying to build a Makefile for sources that have to be built ? for different architectures. So let's say I have my sources at ? the root and I want to place the objects in their subdirectories ? under the root like: ? /src ? /src/vax ? /src/sun3 ? /src/sun4 ? But I only want to keep one Makefile in the my /src directory. ? I have already made a method to determine the architecture and ? then it invokes itself with the proper flags. The problem is ? that I cannot seem to get the implicit rules to work anymore. ? Let's say I'm on the vax, and I type make. It figures out that ? I'm on the vax and then IT does something like: ? make CCFLAGS=-DVAX ? but when it actually gets to a target it says that it doesn't know ? how to make vax/hello.o, or omething like that. I ended up making ? explicit rules for each source file, but would really like to be ? able to use the implicit rules... ? Any clues, or other methods of maintaining a single source tree for ? different architectures? This is just a WAG, I haven't tried it. Code you Makefile as if you were in the subdirectory. Then add the following entry at the beginning: vax sun3 sun4 whatever: (cd $@; make -f ../Makefile all) Where the target `all' builds your program. Just type `make vax' to build the program for the vax. The targets for clean and install are more complex. Another way to do it is by using the `arch' command. all clean install: (cd `arch`; make -f ../Makefile ARCH=-D`arch | tr a-z A-Z` real$@) Of course, there is also the VPATH variable, which may or may not work. ? Thanx! ? Micky Liu ? arpa: micky@cunixc.cc.columbia.edu ? uucp: ...!rutgers!columbia!cunixc!micky ? bitnet: malua@cuvmc Root Boy Jim and the GNU Bohemians