[CMake] Dependency paths in CMake package config files

Ruslan Baratov ruslan_baratov at yahoo.com
Sun Oct 5 14:46:39 EDT 2014


On 02-Oct-14 20:56, Alexander Lamaison wrote:
> How do you manage the paths to the libraries that your static library
> package depends on in the XXXConfig.cmake that gets installed with
> package XXX?
>
> I'm exporting my static library package from both the build tree and
> from the installation location like
>
>    add_library(foo STATIC ...)
>    target_link_libraries(foo PRIVATE ...)
>    install(TARGETS foo EXPORT FooConfig ...)
>
>    ## During package installation, install FooConfig.cmake
>    install(EXPORT FooConfig NAMESPACE Foo:: DESTINATION lib)
>
>    ## During build, register directly from build tree
>    export(TARGETS foo NAMESPACE Foo:: FILE FooConfig.cmake)
>    export(PACKAGE Foo)
>
> This does a great job of generating a FooConfig.cmake that can be used
> by other projects on the local machine.  But target foo is linked with
> other dependencies, for example, OpenSSH so the installed config file
> includes the following:
>
>    set_property(TARGET Foo::foo APPEND PROPERTY IMPORTED_CONFIGURATIONS DEBUG)
>    set_target_properties(Foo::foo PROPERTIES
>      IMPORTED_LINK_INTERFACE_LANGUAGES_DEBUG "C"
>      IMPORTED_LINK_INTERFACE_LIBRARIES_DEBUG "C:/OpenSSL-Win64/lib/VC/ssleay32MDd.lib;C:/OpenSSL-Win64/lib/VC/libeay32MDd.lib;ws2_32"
>      IMPORTED_LOCATION_DEBUG "${_IMPORT_PREFIX}/lib/libfoo.lib")
You can run `find_package` from FooConfig.cmake:

# FooConfig.cmake.in
@PACKAGE_INIT@

find_package(OpenSSL REQUIRED)
target_link_libraries(Foo::foo ${OPENSSL_LIBRARIES})
target_include_directories(Foo::foo ${OPENSSL_INCLUDE_DIR})

>
> So my question is, in general, how can I make installabled static
> libraries with a package config file?  Or is the trying to redistribute
> static libraries a bad idea in the first place?
It's not related to static/shared, this is about absolute path. If you 
have an absolute path for dynamic library in FooConfig.cmake you'll have 
the same issue.


More information about the CMake mailing list