On 2018-12-17 21:35+0100 Mario Emmenlauer wrote:
Dear cmake team and user community, I'd kindly like to ask for advice on how to handle transitive dependencies cleanly with "modern" cmake. I'm often plagued by this problem: I have a library X that optionally depends on library A. When I build library Y that depends on X, how do I (cleanly) handle the optional dependency A? Assume "A" would be "Qt5Core". I can link X publicly against Qt5::Core. But when I import X into Y, then Y will complain about unknown target Qt5::Core, unless I do find_package(Qt5 COMPONENTS Core) in Y. But since Qt is optional in X, I would need to track somehow if Qt was enabled before. But what good is the public transitive dependency when I manually need to track it, to find the libraries again? Am I missing something? Can the dependency be automatically resolved, or can I query some variable if X was linking A? How to do this cleanly?
Hi Mario: One way to cleanly automate this is to configure the XConfig.cmake file (depending on whether X is linked with Qt5 or not) to optionally execute find_package(Qt5 ...) As a result, when the logic in XConfig.cmake is executed as a result of find_package(X ...) from Y, Qt5 should be found automatically when needed. Alan __________________________ Alan W. Irwin Programming affiliations with the FreeEOS equation-of-state implementation for stellar interiors (freeeos.sf.net); the Time Ephemerides project (timeephem.sf.net); PLplot scientific plotting software package (plplot.sf.net); the libLASi project (unifont.org/lasi); the Loads of Linux Links project (loll.sf.net); and the Linux Brochure Project (lbproject.sf.net). __________________________ Linux-powered Science __________________________ -- 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