Suppose you have a CMakeLists.txt file like

=================================

cmake_minimum_required(VERSION 2.8.12)
project(Foo)
add_library(Ext::Imported SHARED IMPORTED)

add_library(FooDep SHARED main.cpp)
install(TARGETS FooDep
    ARCHIVE DESTINATION "lib"
    LIBRARY DESTINATION "lib"
)

add_library(FooMain SHARED main.cpp)
target_link_libraries(FooMain
    PUBLIC
    Ext::Imported

    PRIVATE
    FooDep
)
install(TARGETS FooMain
    EXPORT FooTargets
    ARCHIVE DESTINATION "lib"
    LIBRARY DESTINATION "lib"
)

install(EXPORT FooTargets
        NAMESPACE Foo::
        DESTINATION "lib/cmake/Foo"
        FILE FooTargets.cmake)

=================================

This fails with the error

CMake Error: install(EXPORT "FooTargets" ...) includes target "FooMain" which 
requires target "FooDep" that is not in the export set.

It is not obvious from what I have read of the documentation that this should 
happen, but (looking at the CMake code), this seems to be deliberate - the 
issue is in trying to populate IMPORTED_LINK_DEPENDENT_LIBRARIES for the 
exported target, it wants the private dependencies as well as the interface 
ones. So it wants FooDep to be EXPORTed, even though this may be a private 
internal library.

However, removing the PUBLIC dependencies of FooMain suppresses this error, 
presumably because the INTERFACE_LINK_LIBRARIES property is not set, so 
cmTargetInternals::ComputeLinkInterfaceLibraries does not set 
iface.ExplicitLibraries for the target, so 
cmTargetInternals::ComputeLinkInterface does not add anything to 
iface.SharedDeps, which is what is used to populate 
IMPORTED_LINK_DEPENDENT_LIBRARIES.

This difference in behaviour does not make sense. So either neither case 
should be an error, or both cases should be. However, I don't know which it 
is.

Alex

-- 

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-developers

Reply via email to