[CMake] makefile generator

Bill Hoffman bill.hoffman at kitware.com
Thu Apr 19 09:12:10 EDT 2007


Jesper Eskilson wrote:
>
>>
>
> Can you (or anyone else) elaborate on this? What features are abscent
> from other makes which are necessary to avoid recursive make calls?
> I've got a fair amount of experience of writing complex makefiles for
> gmake, but very little experience with other makes.
>
> I like fast incremental builds over the entire project, i.e. I would
> like to be able to do "make all' and have it completed in under 2-3
> seconds. In Visual Studio this is impossible, but my hope was the that
> Makefile generator could get me somewhere around that mark.
>
> (I'm trying to figure out how much effort it would be to write my own
> generator, but I'm not sure what backend build engine I should target,
> if I should write it from scratch, or try to adapt one of the existing
> generators).
>
> Anyway, despite some of its quirks, CMake is great. The simple fact
> that cmake gets me away from visual studio project files is worth
> alot.
>

Here is a simple example:


foo: foo.h
   ....

If you remove foo.h, make will give an error that foo.h does not exist 
and fail to build.
Cmake does the following to get around this:

make check_build_system  (check for missing files etc, this step could 
regenerate all makefiles)
At this point you have to run another make, because all of the makefiles 
may have been changed.
Gmake will reload changed makefiles, but nmake and other makes will not.


Look back at Brad's steps :

1.) Top level invoked by user.  Check build system integrity.
2.) Inter-target dependency rules.  Build targets in a valid order.
3.) Intra-target dependency rules for a single target.
    a.) Update generated sources.
        Update implicit dependencies (do scanning if necessary).
    b.) Build sources and link target.

These steps are unavoidable.  I would not waste your time with a new 
generator, it will
not have full functionality.  We really tried to eliminate recursive 
make, and have
considered writing a paper "why recursive make is a necessary evil"  to 
counter
the popular but misleading "why recursive make is bad".    The makefiles we
have still handle inter-target depends at a high level and do not depend 
on the
order of recursive make to build things correctly.   However, do to 
generated
file issues and dependency maintenance you still have to invoke more 
copies of make.

-Bill
 


More information about the CMake mailing list