I've reproduced the error. A possible fix would be to extend pkg_check_module and pkg_search_module to allow globally imported targets, i.e. to add an IMPORTED_GLOBAL_TARGET or GLOBAL keyword (where the latter is only usable together with IMPORTED_TARGET) to allow similar control as add_library.

Essentially, adding GLOBAL here

https://gitlab.kitware.com/cmake/cmake/blob/master/Modules/FindPkgConfig.cmake#L232

immediately solves the problem, so it's indeed related to target visibility. Therefore, I think this is intended behavior and the logic for the RHS target is correct.

Maybe we should open an issue and discuss the design of the fix there together with Brad King and the others.

Best regards,
Patrick Stotko

On 30.06.2018 23:03, Patrick Stotko wrote:
It seems that CMake does not find PkgConfig::GooCanvas because it is imported but not globally imported, i.e. it is maybe a visibility problem. For reference, the relaxation of this limitation (https://gitlab.kitware.com/cmake/cmake/merge_requests/2040) is covered by this additional check for the LHS target:

https://gitlab.kitware.com/cmake/cmake/blob/c9349cc1b94a08b4f5ed86a397e72ceed50847dd/Source/cmTargetLinkLibrariesCommand.cxx#L383

Maybe a corresponding check for locally imported RHS targets is missing here:

https://gitlab.kitware.com/cmake/cmake/blob/c9349cc1b94a08b4f5ed86a397e72ceed50847dd/Source/cmTargetLinkLibrariesCommand.cxx#L396

Best regards,
Patrick Stotko


Am 30.06.2018 um 21:15 schrieb Rolf Eike Beer:
* The "target_link_libraries()" command may now be called to modify
   targets created outside the current directory.
I played a bit around with that as I hope it would simplify some things in
OSM2go, but it looks there are still some limitations:

in main:

add_library(osm2go_lib ...)

add_subdirectory(sub)

in sub:

pkg_search_module(GooCanvas REQUIRED IMPORTED_TARGET goocanvas)
target_sources(osm2go_lib PRIVATE
        src/platforms/gtk/canvas_goocanvas.cpp
)
target_link_libraries(osm2go_lib PRIVATE PkgConfig::GooCanvas)

Breaks:

CMake Error at CMakeLists.txt:43 (add_library):
   Target "osm2go_lib" links to target "PkgConfig::GooCanvas" but the target
   was not found.  Perhaps a find_package() call is missing for an IMPORTED
   target, or an ALIAS target is missing?

Is this intended to work?

There is an easy workaround, but it feels nasty:

add_library(osm2go_x_lib INTERFACE)
target_link_libraries(osm2go_x_lib INTERFACE PkgConfig::GooCanvas)
target_link_libraries(osm2go_lib PRIVATE osm2go_x_lib)






-- 

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:
https://cmake.org/mailman/listinfo/cmake-developers

Reply via email to