Qt5 Simple Variables, master branch (2019.03.11.)
While looking at ATLINFR-2967 I ran into a very annoying problem. After fixing one issue with $QTLIB
, I ran into this error while trying to build VP1TrkAuxAlgs
on its own on top of the Athena nightly:
...
-- Configuring done
CMake Error at /cvmfs/atlas-nightlies.cern.ch/repo/sw/master/2019-03-10T2143/Athena/22.0.1/InstallArea/x86_64-centos7-gcc8-opt/cmake/modules/AtlasLibraryFunctions.cmake:217 (add_library):
Target "VP1TrkAuxAlgs" links to target "Qt5::Gui" but the target was not
found. Perhaps a find_package() call is missing for an IMPORTED target, or
an ALIAS target is missing?
Call Stack (most recent call first):
/cvmfs/atlas-nightlies.cern.ch/repo/sw/master/2019-03-10T2143/Athena/22.0.1/InstallArea/x86_64-centos7-gcc8-opt/cmake/modules/AtlasLibraryFunctions.cmake:396 (atlas_add_library)
/home/krasznaa/projects/qt5/athena/graphics/VP1/VP1TrkAuxAlgs/CMakeLists.txt:25 (atlas_add_component)
CMake Error at /cvmfs/atlas-nightlies.cern.ch/repo/sw/master/2019-03-10T2143/Athena/22.0.1/InstallArea/x86_64-centos7-gcc8-opt/cmake/modules/AtlasLibraryFunctions.cmake:217 (add_library):
Target "VP1TrkAuxAlgs" links to target "Qt5::PrintSupport" but the target
was not found. Perhaps a find_package() call is missing for an IMPORTED
target, or an ALIAS target is missing?
Call Stack (most recent call first):
/cvmfs/atlas-nightlies.cern.ch/repo/sw/master/2019-03-10T2143/Athena/22.0.1/InstallArea/x86_64-centos7-gcc8-opt/cmake/modules/AtlasLibraryFunctions.cmake:396 (atlas_add_library)
/home/krasznaa/projects/qt5/athena/graphics/VP1/VP1TrkAuxAlgs/CMakeLists.txt:25 (atlas_add_component)
...
The problem here is that using imported targets in the VP1 packages is unfortunately not as robust as I hoped. VP1TrkAuxAlgs
is linked against VP1Base
, which in turn is linked against Qt5::Gui
and a few other Qt5 libraries. Now, VP1TrkAuxAlgs
does not directly depend on Qt5::Gui
. So it doesn't list it in its find_package(Qt5...)
call. (Correctly.)
But the CMake description created for VP1Base
lists Qt5::Gui
as a dependent library. It lists this name and not the physical file(s) that was linked to the library, because that's just how CMake works. (For good reasons.) But this means that in order to build VP1TrkAuxAlgs
as part of the WorkDir project, one needs to "find" Qt5 libraries that VP1TrkAuxAlgs
does not directly depend on.
Unfortunately as long as we use the imported targets provided by Qt5, we'll always have this issue. So with this update I taught FindQt5.cmake
how to set up the ${QT5_INCLUDE_DIRS}
and ${QT5_LIBRARIES}
variables based on the imported targets provided by Qt5. This will allow us to (possibly) one by one switch the VP1 packages to using these variables instead of the imported targets. Making it possible to use the VP1 libraries more easily in downstream projects. (Like WorkArea...)