[CMake] OBJECT libraries and INTERFACE_SOURCES

Giovanni Funchal gio at cloudnc.co.uk
Fri Dec 9 05:26:21 EST 2016


Hi,

Apologies, the problem wasn't properly minimised because I had some trouble
wrapping my head around it. Here's two complete examples which I hope can
explain the problem better this time.

1) This works:

[CMakeLists.txt]
    cmake_minimum_required(VERSION 3.6)
    project(Test)
    add_library(lib1-obj OBJECT lib1.cpp)
    add_library(lib1 INTERFACE)
    set_target_properties(lib1 PROPERTIES INTERFACE_SOURCES
$<TARGET_OBJECTS:lib1-obj>)
    add_library(lib2 lib2.cpp)
    target_link_libraries(lib2 lib1)
    add_executable(main main.cpp)
    target_link_libraries(main lib2)

2) But this does not:

[CMakeLists.txt]
    cmake_minimum_required(VERSION 3.6)
    project(Test)
    add_library(lib1-obj OBJECT lib1.cpp)
    add_library(lib1 INTERFACE)
    set_target_properties(lib1 PROPERTIES INTERFACE_SOURCES
$<TARGET_OBJECTS:lib1-obj>)
    add_library(lib2 lib2.cpp)
    target_link_libraries(lib2 lib1)
    add_subdirectory(main)

[main/CMakeLists.txt]
    add_executable(main main.cpp)
    target_link_libraries(main lib2)

With the second example, I get an error "cannot find source file lib1.cpp.o
tried extensions...".

Thanks,
-- Giovanni


On Thu, Dec 8, 2016 at 9:56 PM, Stephen Kelly <steveire at gmail.com> wrote:

> Giovanni Funchal wrote:
>
> > Hi,
> >
> > The help page [1] mentions that:
> >
> >> Although object libraries may not be named directly in calls to the
> >> target_link_libraries() command, they can be “linked” indirectly by
> >> using an Interface Library whose INTERFACE_SOURCES target property
> >> is set to name $<TARGET_OBJECTS:objlib>.
> >
> > However, I was unable to get this to work. Doing this:
> >
> > add_library(lib-obj OBJECT test.cpp)
> > add_library(lib INTERFACE)
> > add_dependencies(lib lib-obj)
> > set_target_properties(lib PROPERTIES INTERFACE_SOURCES
> > $<TARGET_OBJECTS:lib-obj>)
> >
> > And then trying to specify lib in link_libraries of an executable yields
> > an error message "Cannot find source file: ... Tried extensions:... ".
> >
> > Am I doing something wrong?
>
> This works for me:
>
>     cmake_minimum_required(VERSION 3.3)
>
>     project(testit CXX)
>
>     add_library(lib-obj OBJECT foo.cpp)
>     add_library(lib-iface INTERFACE)
>     set_target_properties(lib-iface PROPERTIES
>       INTERFACE_SOURCES $<TARGET_OBJECTS:lib-obj>
>     )
>     add_executable(main foo-user.cpp)
>     target_link_libraries(main lib-iface)
>
>
> Thanks,
>
> Steve.
>
>
> --
>
> 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
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://public.kitware.com/pipermail/cmake/attachments/20161209/63369c16/attachment.html>


More information about the CMake mailing list