2007/4/19, Bill Hoffman <[EMAIL PROTECTED]>:
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.
I actually was thinking about not generating makefiles at all, but look into some other backend build engine. Using Ant crossed my mind.
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
Ok, thanks. -- /Jesper _______________________________________________ CMake mailing list [email protected] http://www.cmake.org/mailman/listinfo/cmake
