Transitive dependencies of header libraries

classic Classic list List threaded Threaded
3 messages Options
Reply | Threaded
Open this post in threaded view
|

Transitive dependencies of header libraries

Alberto Luaces
Hi, I have a header-only library which itself depends on another
header-only library:

```
add_library(myheaderonlylib INTERFACE)

target_include_directories(myheaderonlylib INTERFACE
  $<INSTALL_INTERFACE:include/myheaderonlylib>
  )

target_link_libraries(myheaderonlylib INTERFACE Eigen3::Eigen)

install(TARGETS myheaderonlylib EXPORT myheaderonlylib-config DESTINATION include)

install(EXPORT myheaderonlylib-config DESTINATION share/myheaderonlylib/cmake)
```

When a third library links to "myheaderonlylib", cmake adds the target
 Eigen3::Eigen, but since it is not known there, the configuration step
 fails.

I understand this is a difficult one, but I wonder if there is any other
way instead of finding Eigen3::Eigen from the client package.

Thanks!

--
Alberto

--

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 | Threaded
Open this post in threaded view
|

Re: Transitive dependencies of header libraries

CMake mailing list
You need to do add the dependencies in the config.cmake file, which means you
need to seperate the config and export file. So in your CMakeLists.txt, you
would do:

install(TARGETS myheaderonlylib EXPORT myheaderonlylib-targets DESTINATION
include)
install(EXPORT myheaderonlylib-targets DESTINATION
share/myheaderonlylib/cmake)
install(FILES myheaderonlylib-config.cmake DESTINATION
share/myheaderonlylib/cmake)

And then in myheaderonlylib-config.cmake you would write:

include(CMakeFindDependencyMacro)
find_dependency(Eigen)
include("${CMAKE_CURRENT_LIST_DIR}/myheaderonlylib-targets.cmake")

This calls `find_dependency`, which is just a wrapper around `find_package`
that makes it more friendly inside of package config cmake file. This the user
just needs to call `find_package(myheaderonlylib)` and Eigen will be found
automatically.


On Fri, 2017-09-29 at 13:40 +0200, Alberto Luaces wrote:

> Hi, I have a header-only library which itself depends on another
> header-only library:
>
> ```
> add_library(myheaderonlylib INTERFACE)
>
> target_include_directories(myheaderonlylib INTERFACE
>   $<INSTALL_INTERFACE:include/myheaderonlylib>
>   )
>
> target_link_libraries(myheaderonlylib INTERFACE Eigen3::Eigen)
>
> install(TARGETS myheaderonlylib EXPORT myheaderonlylib-config DESTINATION
> include)
>
> install(EXPORT myheaderonlylib-config DESTINATION
> share/myheaderonlylib/cmake)
> ```
>
> When a third library links to "myheaderonlylib", cmake adds the target
>  Eigen3::Eigen, but since it is not known there, the configuration step
>  fails.
>
> I understand this is a difficult one, but I wonder if there is any other
> way instead of finding Eigen3::Eigen from the client package.
>
> Thanks!
>
> -- 
> Alberto
>

.
--

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 | Threaded
Open this post in threaded view
|

Re: Transitive dependencies of header libraries

Alberto Luaces
Ok, I see.

Thanks a lot, Paul!

paul via CMake writes:

> You need to do add the dependencies in the config.cmake file, which means you
> need to seperate the config and export file. So in your CMakeLists.txt, you
> would do:
>
> install(TARGETS myheaderonlylib EXPORT myheaderonlylib-targets DESTINATION
> include)
> install(EXPORT myheaderonlylib-targets DESTINATION
> share/myheaderonlylib/cmake)
> install(FILES myheaderonlylib-config.cmake DESTINATION
> share/myheaderonlylib/cmake)
>
> And then in myheaderonlylib-config.cmake you would write:
>
> include(CMakeFindDependencyMacro)
> find_dependency(Eigen)
> include("${CMAKE_CURRENT_LIST_DIR}/myheaderonlylib-targets.cmake")
>
> This calls `find_dependency`, which is just a wrapper around `find_package`
> that makes it more friendly inside of package config cmake file. This the user
> just needs to call `find_package(myheaderonlylib)` and Eigen will be found
> automatically.
>
>
> On Fri, 2017-09-29 at 13:40 +0200, Alberto Luaces wrote:
>> Hi, I have a header-only library which itself depends on another
>> header-only library:
>>
>> ```
>> add_library(myheaderonlylib INTERFACE)
>>
>> target_include_directories(myheaderonlylib INTERFACE
>>   $<INSTALL_INTERFACE:include/myheaderonlylib>
>>   )
>>
>> target_link_libraries(myheaderonlylib INTERFACE Eigen3::Eigen)
>>
>> install(TARGETS myheaderonlylib EXPORT myheaderonlylib-config DESTINATION
>> include)
>>
>> install(EXPORT myheaderonlylib-config DESTINATION
>> share/myheaderonlylib/cmake)
>> ```
>>
>> When a third library links to "myheaderonlylib", cmake adds the target
>>  Eigen3::Eigen, but since it is not known there, the configuration step
>>  fails.
>>
>> I understand this is a difficult one, but I wonder if there is any other
>> way instead of finding Eigen3::Eigen from the client package.
>>
>> Thanks!
>>
>> -- 
>> Alberto
>>
>
> .

--
Alberto

--

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