From e201f71a7497be309bd5ae909dd8c280fe555930 Mon Sep 17 00:00:00 2001 From: Jonas Kvinge Date: Sat, 16 Sep 2023 14:06:09 +0200 Subject: [PATCH] CMake: Simplify Qt detection --- .github/workflows/build.yml | 10 +- 3rdparty/kdsingleapplication/CMakeLists.txt | 2 +- 3rdparty/macdeployqt/CMakeLists.txt | 2 +- CMakeLists.txt | 121 +++++++------------- debian/CMakeLists.txt | 4 +- ext/gstmoodbar/CMakeLists.txt | 2 +- ext/libstrawberry-common/CMakeLists.txt | 4 +- ext/libstrawberry-tagreader/CMakeLists.txt | 6 +- ext/macdeploycheck/CMakeLists.txt | 2 +- ext/strawberry-tagreader/CMakeLists.txt | 4 +- src/CMakeLists.txt | 15 ++- tests/CMakeLists.txt | 22 ++-- 12 files changed, 83 insertions(+), 111 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 8901d3b2..d4b0273d 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -10,7 +10,7 @@ jobs: fail-fast: false matrix: opensuse_version: [ 'tumbleweed', 'leap:15.4', 'leap:15.5' ] - qt_version: [ 'qt5', 'qt6' ] + qt_version: [ '5', '6' ] container: image: opensuse/${{matrix.opensuse_version}} steps: @@ -65,7 +65,7 @@ jobs: appstream-glib hicolor-icon-theme - name: Install Qt 5 - if: matrix.qt_version == 'qt5' + if: matrix.qt_version == '5' run: > zypper -n --gpg-auto-import-keys in libQt5Core-devel @@ -81,7 +81,7 @@ jobs: libqt5-linguist-devel libqt5-qtx11extras-devel - name: Install Qt 6 - if: matrix.qt_version == 'qt6' + if: matrix.qt_version == '6' run: > zypper -n --gpg-auto-import-keys in qt6-core-devel @@ -107,7 +107,7 @@ jobs: - name: Create Build Environment run: cmake -E make_directory build - name: Configure CMake - run: cmake -S . -B build -DCMAKE_BUILD_TYPE=Debug -DBUILD_WERROR=ON -DUSE_TAGLIB=ON + run: cmake -S . -B build -DCMAKE_BUILD_TYPE=Debug -DBUILD_WERROR=ON -DUSE_TAGLIB=ON -DQT_VERSION_MAJOR=${{matrix.qt_version}} - name: Create source tarball working-directory: build run: ../dist/scripts/maketarball.sh @@ -148,7 +148,7 @@ jobs: if: github.ref == 'refs/heads/master' || github.ref == 'refs/heads/ci' run: ssh -p ${{secrets.SSH_PORT}} -o StrictHostKeyChecking=no ${{secrets.SSH_USER}}@${{secrets.SSH_HOST}} mkdir -p ${{secrets.BUILDS_PATH}}/source ${{secrets.BUILDS_PATH}}/opensuse/${{env.opensuse_subdir}} - name: rsync source - if: (github.ref == 'refs/heads/master' || github.ref == 'refs/heads/ci') && matrix.opensuse_version == 'tumbleweed' && matrix.qt_version == 'qt6' + if: (github.ref == 'refs/heads/master' || github.ref == 'refs/heads/ci') && matrix.opensuse_version == 'tumbleweed' && matrix.qt_version == '6' run: rsync -e "ssh -p ${{secrets.SSH_PORT}} -o StrictHostKeyChecking=no" -var /usr/src/packages/SOURCES/*.xz ${{secrets.SSH_USER}}@${{secrets.SSH_HOST}}:${{secrets.BUILDS_PATH}}/source/ - name: rsync rpms if: (github.ref == 'refs/heads/master' || github.ref == 'refs/heads/ci') && matrix.opensuse_version != 'tumbleweed' diff --git a/3rdparty/kdsingleapplication/CMakeLists.txt b/3rdparty/kdsingleapplication/CMakeLists.txt index e41ed9a1..257a52d2 100644 --- a/3rdparty/kdsingleapplication/CMakeLists.txt +++ b/3rdparty/kdsingleapplication/CMakeLists.txt @@ -5,4 +5,4 @@ qt_wrap_cpp(MOC ${HEADERS}) add_library(kdsingleapplication STATIC ${SOURCES} ${MOC}) target_compile_definitions(kdsingleapplication PRIVATE -DKDSINGLEAPPLICATION_STATIC_BUILD) target_include_directories(kdsingleapplication PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}) -target_link_libraries(kdsingleapplication PUBLIC ${QtCore_LIBRARIES} ${QtNetwork_LIBRARIES} ) +target_link_libraries(kdsingleapplication PUBLIC Qt${QT_VERSION_MAJOR}::Core Qt${QT_VERSION_MAJOR}::Network) diff --git a/3rdparty/macdeployqt/CMakeLists.txt b/3rdparty/macdeployqt/CMakeLists.txt index d091e077..cd1a2bab 100644 --- a/3rdparty/macdeployqt/CMakeLists.txt +++ b/3rdparty/macdeployqt/CMakeLists.txt @@ -1,7 +1,7 @@ add_executable(macdeployqt main.cpp shared.cpp) target_link_libraries(macdeployqt PRIVATE "-framework AppKit" - ${QtCore_LIBRARIES} + Qt${QT_VERSION_MAJOR}::Core ) #execute_process(COMMAND cp ${CMAKE_CURRENT_BINARY_DIR}/macdeployqt ${CMAKE_BINARY_DIR}) diff --git a/CMakeLists.txt b/CMakeLists.txt index b718b2ae..2c0859b8 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -162,84 +162,52 @@ find_package(FFTW3) find_package(GTest) find_library(GMOCK_LIBRARY gmock) -option(QT_VERSION_MAJOR "Qt version to use (5 or 6)") option(BUILD_WITH_QT5 "Build with Qt 5" OFF) option(BUILD_WITH_QT6 "Build with Qt 6" OFF) -if(WITH_QT6) - set(BUILD_WITH_QT6 ON) -endif() -if(QT_MAJOR_VERSION) - set(QT_VERSION_MAJOR ${QT_MAJOR_VERSION}) +if(BUILD_WITH_QT6) + set(QT_VERSION_MAJOR 6) +elseif(BUILD_WITH_QT5) + set(QT_VERSION_MAJOR 5) endif() -if(QT_VERSION_MAJOR) - set(QT_DEFAULT_MAJOR_VERSION ${QT_VERSION_MAJOR}) +if(NOT QT_VERSION_MAJOR) + message(STATUS "QT_VERSION_MAJOR, BUILD_WITH_QT5 or BUILD_WITH_QT6 not set, detecting Qt version...") + find_package(QT NAMES Qt6 Qt5 COMPONENTS Core REQUIRED) endif() + +if(QT_VERSION_MAJOR EQUAL 6) + set(QT_MIN_VERSION 6.0) +elseif(QT_VERSION_MAJOR EQUAL 5) + set(QT_MIN_VERSION 5.12) +else() + message(FATAL_ERROR "Invalid QT_VERSION_MAJOR.") +endif() + +set(QT_DEFAULT_MAJOR_VERSION ${QT_VERSION_MAJOR}) + set(QT_COMPONENTS Core Concurrent Gui Widgets Network Sql) +set(QT_OPTIONAL_COMPONENTS LinguistTools Test) if(DBUS_FOUND AND NOT WIN32) list(APPEND QT_COMPONENTS DBus) endif() -set(QT_OPTIONAL_COMPONENTS Test) -set(QT_MIN_VERSION 5.12) - -if(BUILD_WITH_QT6 OR QT_VERSION_MAJOR EQUAL 6) - set(QT_VERSION_MAJOR 6 CACHE STRING "" FORCE) - set(BUILD_WITH_QT6 ON CACHE BOOL "" FORCE) -elseif(BUILD_WITH_QT5 OR QT_VERSION_MAJOR EQUAL 5) - set(QT_VERSION_MAJOR 5 CACHE STRING "" FORCE) - set(BUILD_WITH_QT5 ON CACHE BOOL "" FORCE) -else() - # Automatically detect Qt version. - find_package(QT NAMES Qt6 Qt5 COMPONENTS ${QT_COMPONENTS} REQUIRED) - if(QT_FOUND AND QT_VERSION_MAJOR EQUAL 6) - set(BUILD_WITH_QT6 ON CACHE BOOL "" FORCE) - set(QT_VERSION_MAJOR 6 CACHE STRING "" FORCE) - elseif(QT_FOUND AND QT_VERSION_MAJOR EQUAL 5) - set(BUILD_WITH_QT5 ON CACHE BOOL "" FORCE) - set(QT_VERSION_MAJOR 5 CACHE STRING "" FORCE) - else() - message(FATAL_ERROR "Missing Qt.") - endif() +if(X11_FOUND AND QT_VERSION_MAJOR EQUAL 5) + list(APPEND QT_COMPONENTS X11Extras) endif() -if(QT_VERSION_MAJOR) - set(QT_DEFAULT_MAJOR_VERSION ${QT_VERSION_MAJOR}) -endif() +find_package(Qt${QT_VERSION_MAJOR} ${QT_MIN_VERSION} COMPONENTS ${QT_COMPONENTS} REQUIRED OPTIONAL_COMPONENTS ${QT_OPTIONAL_COMPONENTS}) -if(X11_FOUND AND BUILD_WITH_QT5) - list(APPEND QT_OPTIONAL_COMPONENTS X11Extras) -endif() - -find_package(Qt${QT_VERSION_MAJOR} ${QT_MIN_VERSION} REQUIRED COMPONENTS ${QT_COMPONENTS} OPTIONAL_COMPONENTS ${QT_OPTIONAL_COMPONENTS}) - -set(QtCore_LIBRARIES Qt${QT_VERSION_MAJOR}::Core) -set(QtConcurrent_LIBRARIES Qt${QT_VERSION_MAJOR}::Concurrent) -set(QtGui_LIBRARIES Qt${QT_VERSION_MAJOR}::Gui) -set(QtWidgets_LIBRARIES Qt${QT_VERSION_MAJOR}::Widgets) -set(QtNetwork_LIBRARIES Qt${QT_VERSION_MAJOR}::Network) -set(QtSql_LIBRARIES Qt${QT_VERSION_MAJOR}::Sql) -set(QT_LIBRARIES Qt${QT_VERSION_MAJOR}::Core Qt${QT_VERSION_MAJOR}::Concurrent Qt${QT_VERSION_MAJOR}::Gui Qt${QT_VERSION_MAJOR}::Widgets Qt${QT_VERSION_MAJOR}::Network Qt${QT_VERSION_MAJOR}::Sql) if(Qt${QT_VERSION_MAJOR}DBus_FOUND) - set(QtDBus_LIBRARIES Qt${QT_VERSION_MAJOR}::DBus) - list(APPEND QT_LIBRARIES Qt${QT_VERSION_MAJOR}::DBus) get_target_property(QT_DBUSXML2CPP_EXECUTABLE Qt${QT_VERSION_MAJOR}::qdbusxml2cpp LOCATION) endif() -if(BUILD_WITH_QT5 AND Qt5X11Extras_FOUND) - set(HAVE_X11EXTRAS ON) - set(QtX11Extras_LIBRARIES Qt5::X11Extras) - list(APPEND QT_LIBRARIES Qt5::X11Extras) -endif() -if(Qt${QT_VERSION_MAJOR}Test_FOUND) - set(QtTest_LIBRARIES Qt${QT_VERSION_MAJOR}::Test) -endif() - -find_package(Qt${QT_VERSION_MAJOR} QUIET COMPONENTS LinguistTools CONFIG) if(Qt${QT_VERSION_MAJOR}LinguistTools_FOUND) - set(QT_LCONVERT_EXECUTABLE Qt${QT_VERSION_MAJOR}::lconvert) + get_target_property(QT_LCONVERT_EXECUTABLE Qt${QT_VERSION_MAJOR}::lconvert LOCATION) +endif() +if(Qt${QT_VERSION_MAJOR}X11Extras_FOUND) + set(HAVE_X11EXTRAS ON) endif() -if(BUILD_WITH_QT5 AND Qt5Core_VERSION VERSION_LESS 5.15.0) +if(QT_VERSION_MAJOR EQUAL 5 AND Qt5Core_VERSION VERSION_LESS 5.15.0) macro(qt_add_resources) qt5_add_resources(${ARGN}) endmacro() @@ -280,9 +248,9 @@ if(X11_FOUND) endif() # Check for QX11Application (Qt 6 compiled with XCB). - if(BUILD_WITH_QT6 AND Qt6Gui_VERSION VERSION_GREATER_EQUAL 6.2.0) + if(QT_VERSION_MAJOR EQUAL 6 AND Qt6Gui_VERSION VERSION_GREATER_EQUAL 6.2.0) set(CMAKE_REQUIRED_FLAGS "-std=c++17") - set(CMAKE_REQUIRED_LIBRARIES ${QtCore_LIBRARIES} ${QtGui_LIBRARIES}) + set(CMAKE_REQUIRED_LIBRARIES Qt${QT_VERSION_MAJOR}::Core Qt${QT_VERSION_MAJOR}::Gui) check_cxx_source_compiles(" #include int main() { @@ -346,11 +314,7 @@ if(APPLE) endif() if(WIN32) - if(BUILD_WITH_QT6) - pkg_check_modules(QTSPARKLE qtsparkle-qt6) - else() - pkg_check_modules(QTSPARKLE qtsparkle-qt5) - endif() + pkg_check_modules(QTSPARKLE qtsparkle-qt${QT_VERSION_MAJOR}) if(QTSPARKLE_FOUND) set(HAVE_QTSPARKLE ON) endif() @@ -384,6 +348,7 @@ optional_component(LIBPULSE ON "PulseAudio integration" optional_component(DBUS ON "D-Bus support" DEPENDS "D-Bus" DBUS_FOUND + DEPENDS "Qt D-Bus" Qt${QT_VERSION_MAJOR}DBus_FOUND ) optional_component(GSTREAMER ON "Engine: GStreamer backend" @@ -409,7 +374,7 @@ optional_component(MUSICBRAINZ ON "MusicBrainz integration" DEPENDS "gstreamer" HAVE_GSTREAMER ) -if(X11_FOUND OR HAVE_DBUS OR APPLE OR WIN32) +if(X11_FOUND OR (HAVE_DBUS AND Qt${QT_VERSION_MAJOR}DBus_FOUND) OR APPLE OR WIN32) set(HAVE_GLOBALSHORTCUTS_SUPPORT ON) endif() @@ -431,7 +396,8 @@ optional_component(AUDIOCD ON "Devices: Audio CD support" ) optional_component(UDISKS2 ON "Devices: UDisks2 backend" - DEPENDS "D-Bus support" DBUS_FOUND + DEPENDS "D-Bus" DBUS_FOUND + DEPENDS "Qt D-Bus" Qt${QT_VERSION_MAJOR}DBus_FOUND ) optional_component(GIO ON "Devices: GIO device backend" @@ -453,17 +419,10 @@ optional_component(LIBMTP ON "Devices: MTP support" DEPENDS "libmtp" LIBMTP_FOUND ) -if(BUILD_WITH_QT6) - optional_component(TRANSLATIONS ON "Translations" - DEPENDS "gettext" GETTEXT_FOUND - DEPENDS "Qt6LinguistTools" Qt6LinguistTools_FOUND - ) -else() - optional_component(TRANSLATIONS ON "Translations" - DEPENDS "gettext" GETTEXT_FOUND - DEPENDS "Qt5LinguistTools" Qt5LinguistTools_FOUND - ) -endif() +optional_component(TRANSLATIONS ON "Translations" + DEPENDS "gettext" GETTEXT_FOUND + DEPENDS "Qt LinguistTools" Qt${QT_VERSION_MAJOR}LinguistTools_FOUND +) option(INSTALL_TRANSLATIONS "Install translations" OFF) @@ -499,7 +458,7 @@ endif() if(NOT CMAKE_CROSSCOMPILING) # Check that we have Qt with sqlite driver set(CMAKE_REQUIRED_FLAGS "-std=c++17") - set(CMAKE_REQUIRED_LIBRARIES ${QtCore_LIBRARIES} ${QtSql_LIBRARIES}) + set(CMAKE_REQUIRED_LIBRARIES Qt${QT_VERSION_MAJOR}::Core Qt${QT_VERSION_MAJOR}::Sql) check_cxx_source_runs(" #include #include @@ -565,7 +524,7 @@ if(HAVE_MOODBAR) add_subdirectory(ext/gstmoodbar) endif() -if(GTest_FOUND AND GMOCK_LIBRARY AND QtTest_LIBRARIES) +if(GTest_FOUND AND GMOCK_LIBRARY AND Qt${QT_VERSION_MAJOR}Test_FOUND) add_subdirectory(tests) endif() diff --git a/debian/CMakeLists.txt b/debian/CMakeLists.txt index 683d1d3c..9cbe2575 100644 --- a/debian/CMakeLists.txt +++ b/debian/CMakeLists.txt @@ -5,11 +5,11 @@ if(LSB_RELEASE_EXEC AND DPKG_BUILDPACKAGE) if(DEB_CODENAME AND DEB_DATE) - if(BUILD_WITH_QT5) + if(QT_VERSION_MAJOR EQUAL 5) set(DEBIAN_BUILD_DEPENDS_QT_PACKAGES qtbase5-dev,qtbase5-dev-tools,qttools5-dev,qttools5-dev-tools,libqt5x11extras5-dev) set(DEBIAN_DEPENDS_QT_PACKAGES libqt5sql5-sqlite) endif() - if(BUILD_WITH_QT6) + if(QT_VERSION_MAJOR EQUAL 6) set(DEBIAN_BUILD_DEPENDS_QT_PACKAGES qt6-base-dev,qt6-base-dev-tools,qt6-tools-dev,qt6-tools-dev-tools,qt6-l10n-tools) set(DEBIAN_DEPENDS_QT_PACKAGES libqt6sql6-sqlite,qt6-qpa-plugins) endif() diff --git a/ext/gstmoodbar/CMakeLists.txt b/ext/gstmoodbar/CMakeLists.txt index 3986b061..43179382 100644 --- a/ext/gstmoodbar/CMakeLists.txt +++ b/ext/gstmoodbar/CMakeLists.txt @@ -31,5 +31,5 @@ target_link_libraries(gstmoodbar PRIVATE ${GSTREAMER_BASE_LIBRARIES} ${GSTREAMER_AUDIO_LIBRARIES} ${FFTW3_FFTW_LIBRARY} - ${QtCore_LIBRARIES} + Qt${QT_VERSION_MAJOR}::Core ) diff --git a/ext/libstrawberry-common/CMakeLists.txt b/ext/libstrawberry-common/CMakeLists.txt index 007238aa..30084840 100644 --- a/ext/libstrawberry-common/CMakeLists.txt +++ b/ext/libstrawberry-common/CMakeLists.txt @@ -34,8 +34,8 @@ endif() target_link_libraries(libstrawberry-common PRIVATE ${CMAKE_THREAD_LIBS_INIT} ${GLIB_LIBRARIES} - ${QtCore_LIBRARIES} - ${QtNetwork_LIBRARIES} + Qt${QT_VERSION_MAJOR}::Core + Qt${QT_VERSION_MAJOR}::Network ) if(Backtrace_FOUND) diff --git a/ext/libstrawberry-tagreader/CMakeLists.txt b/ext/libstrawberry-tagreader/CMakeLists.txt index e8f37908..482c2fac 100644 --- a/ext/libstrawberry-tagreader/CMakeLists.txt +++ b/ext/libstrawberry-tagreader/CMakeLists.txt @@ -50,9 +50,9 @@ target_include_directories(libstrawberry-tagreader PRIVATE target_link_libraries(libstrawberry-tagreader PRIVATE ${GLIB_LIBRARIES} ${Protobuf_LIBRARIES} - ${QtCore_LIBRARIES} - ${QtNetwork_LIBRARIES} - ${QtGui_LIBRARIES} + Qt${QT_VERSION_MAJOR}::Core + Qt${QT_VERSION_MAJOR}::Network + Qt${QT_VERSION_MAJOR}::Gui libstrawberry-common ) diff --git a/ext/macdeploycheck/CMakeLists.txt b/ext/macdeploycheck/CMakeLists.txt index 667b551d..cea78561 100644 --- a/ext/macdeploycheck/CMakeLists.txt +++ b/ext/macdeploycheck/CMakeLists.txt @@ -11,5 +11,5 @@ target_include_directories(macdeploycheck PUBLIC target_link_libraries(macdeploycheck PUBLIC "-framework AppKit" ${GLIB_LIBRARIES} - ${QtCore_LIBRARIES} + Qt${QT_VERSION_MAJOR}::Core ) diff --git a/ext/strawberry-tagreader/CMakeLists.txt b/ext/strawberry-tagreader/CMakeLists.txt index be1df463..3fb41d78 100644 --- a/ext/strawberry-tagreader/CMakeLists.txt +++ b/ext/strawberry-tagreader/CMakeLists.txt @@ -33,8 +33,8 @@ target_include_directories(strawberry-tagreader PRIVATE target_link_libraries(strawberry-tagreader PRIVATE ${GLIB_LIBRARIES} - ${QtCore_LIBRARIES} - ${QtNetwork_LIBRARIES} + Qt${QT_VERSION_MAJOR}::Core + Qt${QT_VERSION_MAJOR}::Network libstrawberry-common libstrawberry-tagreader ) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 4497c61f..b667dcae 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -1091,13 +1091,26 @@ target_link_libraries(strawberry_lib PUBLIC ${GLIB_LIBRARIES} ${GOBJECT_LIBRARIES} ${SQLITE_LIBRARIES} - ${QT_LIBRARIES} + Qt${QT_VERSION_MAJOR}::Core + Qt${QT_VERSION_MAJOR}::Concurrent + Qt${QT_VERSION_MAJOR}::Gui + Qt${QT_VERSION_MAJOR}::Widgets + Qt${QT_VERSION_MAJOR}::Network + Qt${QT_VERSION_MAJOR}::Sql ${Protobuf_LIBRARIES} ${SINGLEAPPLICATION_LIBRARIES} libstrawberry-common libstrawberry-tagreader ) +if(HAVE_DBUS) + target_link_libraries(strawberry_lib PUBLIC Qt${QT_VERSION_MAJOR}::DBus) +endif() + +if(HAVE_X11_GLOBALSHORTCUTS AND HAVE_X11EXTRAS) + target_link_libraries(strawberry_lib PUBLIC Qt${QT_VERSION_MAJOR}::X11Extras) +endif() + if(HAVE_ICU) target_include_directories(strawberry_lib SYSTEM PRIVATE ${ICU_INCLUDE_DIRS}) target_link_libraries(strawberry_lib PRIVATE ${ICU_LIBRARIES}) diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index bf5b82f2..a117d24b 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -54,11 +54,11 @@ target_include_directories(test_utils PRIVATE target_link_libraries(test_utils PRIVATE ${GTEST_BOTH_LIBRARIES} ${GMOCK_LIBRARY} - ${QtCore_LIBRARIES} - ${QtWidgets_LIBRARIES} - ${QtNetwork_LIBRARIES} - ${QtSql_LIBRARIES} - ${QtTest_LIBRARIES} + Qt${QT_VERSION_MAJOR}::Core + Qt${QT_VERSION_MAJOR}::Widgets + Qt${QT_VERSION_MAJOR}::Network + Qt${QT_VERSION_MAJOR}::Sql + Qt${QT_VERSION_MAJOR}::Test ) add_custom_target(strawberry_tests echo "Running Strawberry tests" WORKING_DIRECTORY ${CURRENT_BINARY_DIR}) @@ -111,12 +111,12 @@ macro(add_test_file test_source gui_required) ${TAGLIB_INCLUDE_DIRS} ) target_link_libraries(${TEST_NAME} PRIVATE - ${QtCore_LIBRARIES} - ${QtConcurrent_LIBRARIES} - ${QtWidgets_LIBRARIES} - ${QtNetwork_LIBRARIES} - ${QtSql_LIBRARIES} - ${QtTest_LIBRARIES} + Qt${QT_VERSION_MAJOR}::Core + Qt${QT_VERSION_MAJOR}::Concurrent + Qt${QT_VERSION_MAJOR}::Widgets + Qt${QT_VERSION_MAJOR}::Network + Qt${QT_VERSION_MAJOR}::Sql + Qt${QT_VERSION_MAJOR}::Test ) target_link_libraries(${TEST_NAME} PRIVATE test_utils) set(GUI_REQUIRED ${gui_required})