1

Тема: Qt6 CMake помилка Unknown CMake command qt_generate_deploy_app_script

Намагаюся створити пускач для Manjaro під такий CMakeLists:

cmake_minimum_required(VERSION 3.5)

project(Movar_cpp VERSION 0.1 LANGUAGES CXX)

set(CMAKE_AUTOUIC ON)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)

set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

find_package(QT NAMES Qt6 Qt5 REQUIRED COMPONENTS Widgets)
find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Widgets LinguistTools WebEngineWidgets)
#qt_standard_project_setup()

set(TS_FILES
    i18n/Movar_cpp_uk_UA.ts
    i18n/Movar_cpp_en_US.ts
    i18n/Movar_cpp_ja_JP.ts
)

set(PROJECT_SOURCES
        main.cpp
        mainwindow.cpp
        mainwindow.h
        mainwindow.ui
        ${TS_FILES}
)

if(${QT_VERSION_MAJOR} GREATER_EQUAL 6)
    qt_add_executable(Movar_cpp
        MANUAL_FINALIZATION
        ${PROJECT_SOURCES}
    )
# Define target properties for Android with Qt 6 as:
#    set_property(TARGET Movar_cpp APPEND PROPERTY QT_ANDROID_PACKAGE_SOURCE_DIR
#                 ${CMAKE_CURRENT_SOURCE_DIR}/android)
# For more information, see https://doc.qt.io/qt-6/qt-add-executable.html#target-creation

    #qt_create_translation(QM_FILES ${CMAKE_SOURCE_DIR} ${TS_FILES})
    qt_add_translations(QM_FILES ${CMAKE_SOURCE_DIR} ${TS_FILES})

else()
    if(ANDROID)
        add_library(Movar_cpp SHARED
            ${PROJECT_SOURCES}
        )
# Define properties for Android with Qt 5 after find_package() calls as:
#    set(ANDROID_PACKAGE_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/android")
    else()
        add_executable(Movar_cpp
            ${PROJECT_SOURCES}
            dictionarysettings.h dictionarysettings.cpp dictionarysettings.ui
            fileloader.h fileloader.cpp

        )
    endif()

    qt5_create_translation(QM_FILES ${CMAKE_SOURCE_DIR} ${TS_FILES})
endif()

add_custom_target(translations DEPENDS ${QM_FILES})
add_dependencies(${CMAKE_PROJECT_NAME} translations)

target_link_libraries(Movar_cpp PRIVATE Qt${QT_VERSION_MAJOR}::Widgets)
target_link_libraries(Movar_cpp PRIVATE Qt${QT_VERSION_MAJOR}::WebEngineWidgets)

# Qt for iOS sets MACOSX_BUNDLE_GUI_IDENTIFIER automatically since Qt 6.1.
# If you are developing for iOS or macOS you should consider setting an
# explicit, fixed bundle identifier manually though.
if(${QT_VERSION} VERSION_LESS 6.1.0)
  set(BUNDLE_ID_OPTION MACOSX_BUNDLE_GUI_IDENTIFIER com.example.Movar_cpp)
endif()
set_target_properties(Movar_cpp PROPERTIES
    ${BUNDLE_ID_OPTION}
    MACOSX_BUNDLE_BUNDLE_VERSION ${PROJECT_VERSION}
    MACOSX_BUNDLE_SHORT_VERSION_STRING ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}
    MACOSX_BUNDLE TRUE
    WIN32_EXECUTABLE TRUE
)

include(GNUInstallDirs)
install(TARGETS Movar_cpp
    BUNDLE DESTINATION .
    LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
    RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
)

if(QT_VERSION_MAJOR EQUAL 6)
    qt_finalize_executable(Movar_cpp)
endif()

install(TARGETS Movar_cpp
    BUNDLE  DESTINATION .
    RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
)

qt_generate_deploy_app_script(
    TARGET Movar_cpp
    OUTPUT_SCRIPT deploy_script
    NO_UNSUPPORTED_PLATFORM_ERROR
)
install(SCRIPT ${deploy_script})

Я використовую Cmake-gui, з того, що бачу, CMake чомусь не знаходить Qt6 і працює лише з Qt5.
Як це виправити? Як прописати шлях до Qt6, щоб CMake його точно побачив?

2

Re: Qt6 CMake помилка Unknown CMake command qt_generate_deploy_app_script

Треба було перед find_package додати set(CMAKE_PREFIX_PATH "шлях до потрібних файлів").
Щодо пускача, то він, як виявилося, автоматично створюється Qt Creator у теці з міткою debug при першому запуску програми.
Його можна вивести в якості ярлика на робочий стіл і запускати програму напряму, не заходячи до Qt Creator.

Подякували: leofun011

3

Re: Qt6 CMake помилка Unknown CMake command qt_generate_deploy_app_script

Vitaliy_Danmer написав:

Щодо пускача, то він, як виявилося, автоматично створюється Qt Creator у теці з міткою debug при першому запуску програми.

Попробуй компілювати Release, і порівняй з Debug, Release має менший розмір виконуваного файла (перевага), але якщо програма викине помилку або не очікувано припинить роботу, то нема значної частини інфо про сурси, це ускладнює дослідження причини такої поведінки (недолік).

Подякували: Teg Miles1