Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. International
  3. Italian
  4. Distribuire applicazione basata su Qt con CPack
Forum Updated to NodeBB v4.3 + New Features

Distribuire applicazione basata su Qt con CPack

Scheduled Pinned Locked Moved Unsolved Italian
6 Posts 3 Posters 1.3k Views 1 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • A Offline
    A Offline
    Alexv92
    wrote on last edited by Alexv92
    #1

    Salve, sto cercando di creare un pacchetto d'installazione di un'applicazione che fa uso delle Qt, utilizzando il modulo CPack di CMake.
    Per poter includere le dll ho usato il comando GET_RUNTIME_DEPENDENCIES. Il problema è che nel pacchetto d'installazione NSIS vengono copiati solo file di sistema, non quelli delle Qt.
    Vi allego il codice del file cmakelists.txt

    project(myproj)
    set(PROJECT_VERSION_MAJOR "1")
    set(PROJECT_VERSION_MINOR "0")
    set(PROJECT_VERSION_PATCH "0")
    
    cmake_minimum_required(VERSION 3.16.0 FATAL_ERROR)
    cmake_policy(SET CMP0087 NEW)
    
    file(GLOB my_sources *.h *.cpp style.qrc)
    
    find_package(Qt5Widgets REQUIRED)
    find_package(Qt5Gui REQUIRED)
    find_package(Qt5Core REQUIRED)
    find_package(Qt5Multimedia REQUIRED)
    
    set(CMAKE_AUTORCC ON)
    set(CMAKE_AUTOMOC ON)
    
    add_executable(myexe ${my_sources})
    qt5_add_binary_resources(media_res media.qrc)
    
    target_link_libraries(myexe Qt5::Widgets Qt5::Gui Qt5::Core Qt5::Multimedia)
    
    install (TARGETS myexe DESTINATION bin)
    install (CODE [[
    	file(GET_RUNTIME_DEPENDENCIES
    		EXECUTABLES $<TARGET_FILE:myexe>
    		RESOLVED_DEPENDENCIES_VAR r_deps)
                    DIRECTORIES "C:\Qt\5.14.2\msvc2017_64\bin"
            foreach(_file ${r_deps})
               file(INSTALL
                       DESTINATION "${CMAKE_INSTALL_PREFIX}/bin"
                       TYPE SHARED_LIBRARY
                       FILES "${_file}"
                    )
            endforeach()
            ]])
    include(CPack)
    

    EDIT: chiedo scusa, avevo mancato di trascrivere il blocco foreach().

    1 Reply Last reply
    0
    • VRoninV Offline
      VRoninV Offline
      VRonin
      wrote on last edited by
      #2

      Per fare deployment su window l'unico modo su cui puoi fare affidamento e' windeployqt (GET_RUNTIME_DEPENDENCIES non sara' mai in grado di trovare i plugins per ovvie ragioni).

      La cattiva notizia e' che al momento e' un inferno al punto che, secono me, e' inusabile

      Tieni d'occhio questo ticket in quanto sembra ci possano essere miglioramenti con CMake 3.19: https://bugreports.qt.io/browse/QTBUG-84789

      "La mort n'est rien, mais vivre vaincu et sans gloire, c'est mourir tous les jours"
      ~Napoleon Bonaparte

      On a crusade to banish setIndexWidget() from the holy land of Qt

      1 Reply Last reply
      0
      • mrdebugM Offline
        mrdebugM Offline
        mrdebug
        wrote on last edited by
        #3

        Lascia perdere cmake, usa innosetup su windows, un pacchetto deb oppure rpm su linux e package maker su mac.
        Attenzione ad eventuali plugins ed alla cartella qml .

        Need programmers to hire?
        www.labcsp.com
        www.denisgottardello.it
        GMT+1
        Skype: mrdebug

        VRoninV 1 Reply Last reply
        0
        • mrdebugM mrdebug

          Lascia perdere cmake, usa innosetup su windows, un pacchetto deb oppure rpm su linux e package maker su mac.
          Attenzione ad eventuali plugins ed alla cartella qml .

          VRoninV Offline
          VRoninV Offline
          VRonin
          wrote on last edited by
          #4

          @mrdebug said in Distribuire applicazione basata su Qt con CPack:

          Lascia perdere cmake

          Come grande fan di CMake, I don't approve this message

          usa innosetup su windows, un pacchetto deb oppure rpm su linux e package maker su mac.
          Attenzione ad eventuali plugins ed alla cartella qml .

          Eh ma questo equivale a fare l'installer manualmente, anche CPack puo' gestire l'installer se specifichi i liles a mano ma credo che OP volesse qualcosa di piu' automatico

          "La mort n'est rien, mais vivre vaincu et sans gloire, c'est mourir tous les jours"
          ~Napoleon Bonaparte

          On a crusade to banish setIndexWidget() from the holy land of Qt

          1 Reply Last reply
          0
          • mrdebugM Offline
            mrdebugM Offline
            mrdebug
            wrote on last edited by
            #5

            Io di programmi ne distribuisco parecchi.
            In fase di installazione infatti innosetup controlla se c'è già una installazione vecchia da aggiornare, se il database c'è già oppure va installato, è multilingua, installa librerie tipo vcredist se servono...
            Con cmake non si possono fare queste cose.

            Need programmers to hire?
            www.labcsp.com
            www.denisgottardello.it
            GMT+1
            Skype: mrdebug

            VRoninV 1 Reply Last reply
            0
            • mrdebugM mrdebug

              Io di programmi ne distribuisco parecchi.
              In fase di installazione infatti innosetup controlla se c'è già una installazione vecchia da aggiornare, se il database c'è già oppure va installato, è multilingua, installa librerie tipo vcredist se servono...
              Con cmake non si possono fare queste cose.

              VRoninV Offline
              VRoninV Offline
              VRonin
              wrote on last edited by VRonin
              #6

              @mrdebug said in Distribuire applicazione basata su Qt con CPack:

              Con cmake non si possono fare queste cose.

              CPack (parte di CMake) non fa nulla da solo, lui crea un "modo standard" di creare installers con altri tools. Innosetup, a quanto ne so, non e' ancora supportato ma NSIS (forse il piu' popolare in ambito free-software) e Wix (quello che uso io su windows) sono entrambi funzionanti.

              Per fare un parallelo:
              CMake non e' un build system, e' un build system generator cioe' e' un linguaggio generico per creare progetti che possono essere compilati da vari build systems come Visual Studio, Ninja, make, etc.

              CPack non e' un creatore di intsallers, e' un generatore di installer build. E' un linguaggio comune per creare releases dal piu' banale archivio zip/tar con i files a script che tools esterni come Wix, NSIS, etc. usano per poi creare l'installer vero e proprio

              "La mort n'est rien, mais vivre vaincu et sans gloire, c'est mourir tous les jours"
              ~Napoleon Bonaparte

              On a crusade to banish setIndexWidget() from the holy land of Qt

              1 Reply Last reply
              0

              • Login

              • Login or register to search.
              • First post
                Last post
              0
              • Categories
              • Recent
              • Tags
              • Popular
              • Users
              • Groups
              • Search
              • Get Qt Extensions
              • Unsolved