Boston Linux & Unix (BLU) 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

BLU Discuss list archive


[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

make -j optimization



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
BLU is a member of BostonUserGroups
We also thank MIT for the use of their facilities.

Valid HTML 4.01! Valid CSS!



Boston Linux & Unix / webmaster@blu.org