[CMake] Why are object files built several times?

Andreas Pakulat apaku at gmx.de
Wed Sep 26 09:23:51 EDT 2007


On 26.09.07 09:19:06, Bill Hoffman wrote:
> Andreas Pakulat wrote:
> >On 26.09.07 15:13:38, Dizzy wrote:
> >  
> >>On Wednesday 26 September 2007 14:55:52 Joachim Ziegler wrote:
> >>    
> >>>Hello,
> >>>
> >>>I have two targets that have nearly the same sources:
> >>>
> >>>ADD_EXECUTABLE(startCompletionServer StartCompletionServer.cpp
> >>>${BASEFILES}) ADD_EXECUTABLE(test-adler32 test-adler32.cpp ${BASEFILES})
> >>>
> >>>I wonder why every object file belonging to the BASEFILES is built
> >>>twice, once for the first target, once again for the second. This
> >>>doubles my compile time!?
> >>>      
> >>You will notice that cmake is building files inside a build directory 
> >>different for each target. So it is ment to be that way (normally you may 
> >>have different compile flags for different targets so you want that). If you 
> >>do not want that then just put your BASEFILES in a "convenience library" and 
> >>reuse it from both targets such as:
> >>    
> >
> >Note that this creates a static convenience library which is not
> >portable to some architectures without extra compiler flags (need -fPIC
> >on amd64 and maybe other 64bit architectures).
> >
> >Another way is to create a shared lib (and also install that one), but
> >don't provide headers for the library and don't give it a SOVERSION so
> >people won't link against it.
> >  
> For the example given this is very portable.  He is building two executables 
> and not two shared libraries.

Right, always forgetting that small detail :)

Andreas

-- 
Don't plan any hasty moves.  You'll be evicted soon anyway.


More information about the CMake mailing list