[CMake] preventing redundant compilations

Alexander Neundorf a.neundorf-work at gmx.net
Wed Mar 18 20:09:50 EDT 2009


On Thursday 19 March 2009, Philip Lowman wrote:
> On Wed, Mar 18, 2009 at 7:05 PM, Alexander Neundorf
> <a.neundorf-work at gmx.net
>
> > wrote:
> >
> > On Wednesday 18 March 2009, Denis Scherbakov wrote:
> > > You could do the following:
> > >
> > > ADD_LIBRARY(intermediate STATIC a.cpp)
> > >
> > > ADD_LIBRARY(foo b.cpp)
> > > TARGET_LINK_LIBRARIES(foo intermediate)
> > >
> > > ADD_LIBRARY(bar c.cpp)
> > > TARGET_LINK_LIBRARIES(bar intermediate)
> >
> > That's not portable if bar and foo are shared libraries.
> > See it as a feature that cmake recognizes that these files have to be
> > compiled
> > separately for separate targets, since separate targets may have other
> > compile flags etc, so may need different object files.
>
> In theory the Makefile generator could be adapted to share object files
> across targets provided all the compilation flags are the same.  This would
> obviously take time and introduce additional complexity.  It would also be
> of limited benefit since usually source files are not compiled in more than
> one library or executable.
>
> Also, in theory you could reuse object files compiled for a shared library
> (with -fPIC) in static libraries (on certain platforms).  Since
> preprocessor definitions usually always change per target when using shared
> libraries due to export definitions, however, this would also be of limited
> benefit.

Basically it would be the same as the so-called "convenience" libraries with 
autotools.
I think there is a feature request for this somewhere in the bug tracker.

Alex



More information about the CMake mailing list