[CMake] Transitive dependencies of header libraries

Alberto Luaces aluaces at udc.es
Mon Oct 2 05:13:02 EDT 2017


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



More information about the CMake mailing list