Hi David.

In your particular case, you don't have build everything twice. Just make
the SHARED libraries thin wrappers around the OBJECT libraries. Like this:

add_library(obj1 OBJECT a.cpp b.cpp ...)
add_library(lib1 SHARED $<TARGET_OBJECTS:obj1>)

add_library(obj2 OBJECT c.cpp d.cpp ...)
add_library(lib2 SHARED $<TARGET_OBJECTS:obj2>)

add_library(combined SHARED $<TARGET_OBJECTS:obj1> $<TARGET_OBJECTS:obj2>)

Petr

On 10 July 2017 at 19:41, David Hunter <davidhunte...@gmail.com> wrote:

> Currently you can create an OBJECT library using "add_library(<name>
> OBJECT <src>...)" this populates $<TARGET_OBJECTS:name>  which can then
> later be used using something like
> "target_sources(name PUBLIC $<TARGET_OBJECTS:name>)". I am wondering if
> there  is some reason that $<TARGET_OBJECTS:name> can't be populated when
> you create a shared or static library, for instance using
> "add_library(<name> SHARED <src>...)". Looking at the output the VS 2017
> generators for "add_library(<name> OBJECT <src>...)" it seems to actually
> build a static library anyway. I suspect that all the <src> files are
> compiled to object files somewhere for both STATIC and SHARED libraries,
> if so would it not be possible to point $<TARGET_OBJECTS:name> as these
> object files?
>
> The reason I ask is that we have a a bunch of source code that builds
> in about 100 projects. These projects have a normal hierarchical
> dependency tree. However when distributing we want to create larger
> libraries that are the combination of various subsets of the smaller ones.
> In automake these are called convenience libraries and I suspect they may
> have been the reason for CMake OBJECT in the first place. Given the current
> behaviour we have to build all the projects twice once in SHARED library
> form on once in OBJECT library form. If TARGET_OBJECTS was populated for
> SHARED libraries we would not need to build everything twice as we could
> build everything SHARED but still use TARGET_OBJECTS to build combination
> convenience libraries.
>
> Of course maybe there's already a way to do this without having to
> build twice which I don't know about.
>
-- 

Powered by www.kitware.com

Please keep messages on-topic and check the CMake FAQ at: 
http://www.cmake.org/Wiki/CMake_FAQ

Kitware offers various services to support the CMake community. For more 
information on each offering, please visit:

CMake Support: http://cmake.org/cmake/help/support.html
CMake Consulting: http://cmake.org/cmake/help/consulting.html
CMake Training Courses: http://cmake.org/cmake/help/training.html

Visit other Kitware open-source projects at 
http://www.kitware.com/opensource/opensource.html

Follow this link to subscribe/unsubscribe:
http://public.kitware.com/mailman/listinfo/cmake

Reply via email to