Home
| Calendar
| Mail Lists
| List Archives
| Desktop SIG
| Hardware Hacking SIG
Wiki | Flickr | PicasaWeb | Video | Maps & Directions | Installfests | Keysignings Linux Cafe | Meeting Notes | Linux Links | Bling | About BLU |
David Kramer wrote: >Major DOH! > >Apparently make is not smart enough to not build things it doesn't have >the dependencies for yet. Huh? Make has one function and one function >only: build dependencied before the things that need them. > >I was trying to compile Rogue Wave. There are about 20 or 30 .o target >files that get build from .cpp files. Then there's a library that gets >built from the .o files. Even though the makefile correctly had the .c >files as dependencies for the .o files, and the .o files as dependencies >for the library, it tried to "ar" the library together before all the .o >files were created, resulting in about half of them being "not found". > >That blows. How could they get that wrong? If it's not going to be smart >enough to try building a target until its dependencies are built, then at >least only parallelize the commands to build one target at a time. > > I used this many years ago, but I remember that the -j spread out the make targets to multiple processes. So if you have a rule objs : $(SOURCES) $(INCLUDES) gcc $* the -j doesn't spread out the 'gcc' invocations, it would put the 'objs' target in one process and then it would find another make target and start it up immediately. When I used it I spent a long time reorganizing the make file so that I had 4 separate targets to build the source (I was using a 4way Sparcserver). --Mark
BLU is a member of BostonUserGroups | |
We also thank MIT for the use of their facilities. |