Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. General and Desktop
  4. Copying .dlls into target directory
Forum Updated to NodeBB v4.3 + New Features

Copying .dlls into target directory

Scheduled Pinned Locked Moved Unsolved General and Desktop
43 Posts 7 Posters 28.3k Views 4 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.
  • mrjjM mrjj

    well I was under the impression that make install was a unix thing as doc mentioned but
    then i read that mingw-make does have "install". I have however never tried it.

    But the plugandpaint example has

    target.path = $$[QT_INSTALL_EXAMPLES]/widgets/tools/plugandpaint
    INSTALLS += target
    which maps to
    C:/Qt/Examples/Qt-5.7/widgets/tools/plugandpaint
    But nothing is copied there so Im not sure it does work.

    kshegunovK Offline
    kshegunovK Offline
    kshegunov
    Moderators
    wrote on last edited by
    #17

    @mrjj said in copying .dlls into target directory:

    well I was under the impression that make install was a unix thing as doc mentioned but

    No, it's a make thing. Any self-respecting make implementation (including MS's nmake) should provide the install target out of the box. :)

    But the plugandpaint example has

    Well, how did you install? Did you call make install (or equivalent) from the Qt source's base path? If not, you've erred, because there's a chain of pro files (and mkspecs and other goodies that get included and ultimately the QT_INSTALL_EXAMPLES is set for you). But anyway, that's another matter altogether.

    @mzimmers

    I suggest you run qmake manually with -d or -d -d to get some debug info back. It is possible that the qmake's makefile generator doesn't respect the INSTALLS variable (although I see no reason it shouldn't).

    Kind regards.

    Read and abide by the Qt Code of Conduct

    1 Reply Last reply
    2
    • mzimmersM Offline
      mzimmersM Offline
      mzimmers
      wrote on last edited by
      #18

      @kshegunov - thank you for the suggestion. I tried this and got ~6700 error messages; I'm not sure I did it correctly.

      I do have another question: my build steps are to run make first, then qmake. If qmake is a "meta-make" tool, shouldn't the order be 1) qmake and 2) make?

      Thank you.

      jsulmJ 1 Reply Last reply
      0
      • mzimmersM mzimmers

        @kshegunov - thank you for the suggestion. I tried this and got ~6700 error messages; I'm not sure I did it correctly.

        I do have another question: my build steps are to run make first, then qmake. If qmake is a "meta-make" tool, shouldn't the order be 1) qmake and 2) make?

        Thank you.

        jsulmJ Offline
        jsulmJ Offline
        jsulm
        Lifetime Qt Champion
        wrote on last edited by
        #19

        @mzimmers Yes qmake should be the first one

        https://forum.qt.io/topic/113070/qt-code-of-conduct

        1 Reply Last reply
        2
        • mzimmersM Offline
          mzimmersM Offline
          mzimmers
          wrote on last edited by kshegunov
          #20

          Well, somehow they got switched (I probably fat-fingered it). I put them in the correct order (qmake, make, make install) and still it doesn't copy the files. Here's the compiler output:

          08:42:17: Running steps for project storefile_client...
          08:42:17: Configuration unchanged, skipping qmake step.
          08:42:17: Starting: "C:\Qt\Tools\mingw530_32\bin\mingw32-make.exe" 
          C:/Qt/Tools/mingw530_32/bin/mingw32-make -f Makefile.Debug
          mingw32-make[1]: Entering directory 'C:/Users/mzimmers/Wideband/Peninsula/build-storefile_client-Desktop_Qt_5_7_0_MinGW_32bit-Debug'
          g++ -c -pipe -fno-keep-inline-dllexport -g -std=gnu++11 -frtti -Wall -Wextra -fexceptions -mthreads -DUNICODE -DQT_QML_DEBUG -I..\storefile_client -I. -I..\ARM\inc -IC:\Qt\5.7\mingw53_32\mkspecs\win32-g++  -o debug\storefile_client.o ..\storefile_client\storefile_client.cpp
          g++ -Wl,-subsystem,console -mthreads -o debug\storefile.exe debug/storefile_client.o  "C:\Program Files (x86)\Windows Kits\8.0\Lib\win8\um\x86\ws2_32.lib" 
          mingw32-make[1]: Leaving directory 'C:/Users/mzimmers/Wideband/Peninsula/build-storefile_client-Desktop_Qt_5_7_0_MinGW_32bit-Debug'
          08:42:18: The process "C:\Qt\Tools\mingw530_32\bin\mingw32-make.exe" exited normally.
          08:42:18: Starting: "C:\Qt\Tools\mingw530_32\bin\mingw32-make.exe" install
          C:/Qt/Tools/mingw530_32/bin/mingw32-make -f Makefile.Debug install
          mingw32-make[1]: Entering directory 'C:/Users/mzimmers/Wideband/Peninsula/build-storefile_client-Desktop_Qt_5_7_0_MinGW_32bit-Debug'
          **mingw32-make[1]: Nothing to be done for 'install'.**
          mingw32-make[1]: Leaving directory 'C:/Users/mzimmers/Wideband/Peninsula/build-storefile_client-Desktop_Qt_5_7_0_MinGW_32bit-Debug'
          08:42:19: The process "C:\Qt\Tools\mingw530_32\bin\mingw32-make.exe" exited normally.
          08:42:19: Elapsed time: 00:02.
          

          To my layman eyes, it's looking more like the make that comes with mingw doesn't honor installs?

          kshegunovK 1 Reply Last reply
          0
          • mzimmersM mzimmers

            Well, somehow they got switched (I probably fat-fingered it). I put them in the correct order (qmake, make, make install) and still it doesn't copy the files. Here's the compiler output:

            08:42:17: Running steps for project storefile_client...
            08:42:17: Configuration unchanged, skipping qmake step.
            08:42:17: Starting: "C:\Qt\Tools\mingw530_32\bin\mingw32-make.exe" 
            C:/Qt/Tools/mingw530_32/bin/mingw32-make -f Makefile.Debug
            mingw32-make[1]: Entering directory 'C:/Users/mzimmers/Wideband/Peninsula/build-storefile_client-Desktop_Qt_5_7_0_MinGW_32bit-Debug'
            g++ -c -pipe -fno-keep-inline-dllexport -g -std=gnu++11 -frtti -Wall -Wextra -fexceptions -mthreads -DUNICODE -DQT_QML_DEBUG -I..\storefile_client -I. -I..\ARM\inc -IC:\Qt\5.7\mingw53_32\mkspecs\win32-g++  -o debug\storefile_client.o ..\storefile_client\storefile_client.cpp
            g++ -Wl,-subsystem,console -mthreads -o debug\storefile.exe debug/storefile_client.o  "C:\Program Files (x86)\Windows Kits\8.0\Lib\win8\um\x86\ws2_32.lib" 
            mingw32-make[1]: Leaving directory 'C:/Users/mzimmers/Wideband/Peninsula/build-storefile_client-Desktop_Qt_5_7_0_MinGW_32bit-Debug'
            08:42:18: The process "C:\Qt\Tools\mingw530_32\bin\mingw32-make.exe" exited normally.
            08:42:18: Starting: "C:\Qt\Tools\mingw530_32\bin\mingw32-make.exe" install
            C:/Qt/Tools/mingw530_32/bin/mingw32-make -f Makefile.Debug install
            mingw32-make[1]: Entering directory 'C:/Users/mzimmers/Wideband/Peninsula/build-storefile_client-Desktop_Qt_5_7_0_MinGW_32bit-Debug'
            **mingw32-make[1]: Nothing to be done for 'install'.**
            mingw32-make[1]: Leaving directory 'C:/Users/mzimmers/Wideband/Peninsula/build-storefile_client-Desktop_Qt_5_7_0_MinGW_32bit-Debug'
            08:42:19: The process "C:\Qt\Tools\mingw530_32\bin\mingw32-make.exe" exited normally.
            08:42:19: Elapsed time: 00:02.
            

            To my layman eyes, it's looking more like the make that comes with mingw doesn't honor installs?

            kshegunovK Offline
            kshegunovK Offline
            kshegunov
            Moderators
            wrote on last edited by
            #21

            Honestly, I have no idea. Could you attach the make file and the pro you're currently using?

            Read and abide by the Qt Code of Conduct

            1 Reply Last reply
            0
            • mzimmersM Offline
              mzimmersM Offline
              mzimmers
              wrote on last edited by kshegunov
              #22

              @kshegunov : I don't know how to attach files, so I uploaded them to here.

              You should be able to view and/or download from there. If not, please let me know.

              Thanks...

              kshegunovK 1 Reply Last reply
              0
              • mzimmersM mzimmers

                @kshegunov : I don't know how to attach files, so I uploaded them to here.

                You should be able to view and/or download from there. If not, please let me know.

                Thanks...

                kshegunovK Offline
                kshegunovK Offline
                kshegunov
                Moderators
                wrote on last edited by
                #23

                I don't know how to attach files

                That's what I meant - upload and post the link.

                From what I can see in the makefile your install target is empty (FORCE goes to the end):

                install:  FORCE
                

                And there's something suspicious about the .pro, you've commented INSTALLS += libs_to_copy and used INSTALLS += C:\Qt\5.7\mingw53_32\bin\libgcc_s_dw2-1.dll instead.

                I suggest setting a hard path (not through a var) for the libs_to_copy contents and trying with INSTALLS += libs_to_copy. After modifying the file, don't forget to run qmake and then make, make install.

                Read and abide by the Qt Code of Conduct

                1 Reply Last reply
                0
                • mzimmersM Offline
                  mzimmersM Offline
                  mzimmers
                  wrote on last edited by mzimmers
                  #24

                  I tried this:

                  libs_to_copy = "C:/Qt/5.7/mingw53_32/bin/libgcc_s_dw2-1.dll"
                  INSTALLS += libs_to_copy

                  and I get this error:

                  :-1: warning: libs_to_copy.path is not defined: install target not created

                  When I do this:
                  libs_to_copy.files = $$(QMAKE_LIBDIR_QT)/libgcc_s_dw2-1.dll
                  libs_to_copy.path = $$(OUT_PWD)/$$(OUTDIR)
                  INSTALLS += libs_to_copy

                  I don't get the error, but the file doesn't copy.

                  kshegunovK 1 Reply Last reply
                  0
                  • mzimmersM mzimmers

                    I tried this:

                    libs_to_copy = "C:/Qt/5.7/mingw53_32/bin/libgcc_s_dw2-1.dll"
                    INSTALLS += libs_to_copy

                    and I get this error:

                    :-1: warning: libs_to_copy.path is not defined: install target not created

                    When I do this:
                    libs_to_copy.files = $$(QMAKE_LIBDIR_QT)/libgcc_s_dw2-1.dll
                    libs_to_copy.path = $$(OUT_PWD)/$$(OUTDIR)
                    INSTALLS += libs_to_copy

                    I don't get the error, but the file doesn't copy.

                    kshegunovK Offline
                    kshegunovK Offline
                    kshegunov
                    Moderators
                    wrote on last edited by
                    #25

                    @mzimmers said in Copying .dlls into target directory:

                    libs_to_copy.files = $$(QMAKE_LIBDIR_QT)/libgcc_s_dw2-1.dll
                    libs_to_copy.path = $$(OUT_PWD)/$$(OUTDIR)
                    INSTALLS += libs_to_copy
                    

                    I don't get the error, but the file doesn't copy.

                    What about this:

                    libs_to_copy.files = C:/Qt/5.7/mingw53_32/bin/libgcc_s_dw2-1.dll
                    libs_to_copy.path = $$(OUT_PWD)
                    
                    INSTALLS += libs_to_copy
                    

                    ?

                    Alternatively you could try to add an additional target.

                    Read and abide by the Qt Code of Conduct

                    mzimmersM 1 Reply Last reply
                    0
                    • kshegunovK kshegunov

                      @mzimmers said in Copying .dlls into target directory:

                      libs_to_copy.files = $$(QMAKE_LIBDIR_QT)/libgcc_s_dw2-1.dll
                      libs_to_copy.path = $$(OUT_PWD)/$$(OUTDIR)
                      INSTALLS += libs_to_copy
                      

                      I don't get the error, but the file doesn't copy.

                      What about this:

                      libs_to_copy.files = C:/Qt/5.7/mingw53_32/bin/libgcc_s_dw2-1.dll
                      libs_to_copy.path = $$(OUT_PWD)
                      
                      INSTALLS += libs_to_copy
                      

                      ?

                      Alternatively you could try to add an additional target.

                      mzimmersM Offline
                      mzimmersM Offline
                      mzimmers
                      wrote on last edited by
                      #26

                      @kshegunov said in Copying .dlls into target directory:

                      @mzimmers said in Copying .dlls into target directory:

                      libs_to_copy.files = $$(QMAKE_LIBDIR_QT)/libgcc_s_dw2-1.dll
                      libs_to_copy.path = $$(OUT_PWD)/$$(OUTDIR)
                      INSTALLS += libs_to_copy
                      

                      I don't get the error, but the file doesn't copy.

                      What about this:

                      libs_to_copy.files = C:/Qt/5.7/mingw53_32/bin/libgcc_s_dw2-1.dll
                      libs_to_copy.path = $$(OUT_PWD)
                      
                      INSTALLS += libs_to_copy
                      

                      ?

                      That gives me this error:

                      :-1: warning: libs_to_copy.path is not defined: install target not created

                      Alternatively you could try to add an additional target.

                      I may have to fall back to this, if it turns out that the INSTALLS directive doesn't work.

                      Thanks...

                      kshegunovK 1 Reply Last reply
                      0
                      • BuckwheatB Offline
                        BuckwheatB Offline
                        Buckwheat
                        wrote on last edited by mrjj
                        #27

                        @mzimmers ... Your solution for copying looks pretty good. I am going to remember it. You mentioned modifying DESTDIR. I actually prefer doing that as well as setting the MOC_DIR and OBJECTS_DIR to make the build where I know things are located. It also makes it clean. When doing this, I turn off the shadow build into that horrendously long path. My structure is typically as follows (only release config):

                        <root>
                           bin
                              plugins
                              ,,,
                           build
                              <subproject>
                                 release
                                    moc
                                    obj
                              ...
                              <main app>
                                 release
                                    moc
                                    obj
                           lib
                              release
                        

                        As you can see it is relatively clean and you know where things are built. I use MSYS2 for development because I can get 32 and 64 bit development. QtCreator 4.1.x for IDE.

                        I copy my 3rd party DLLs (except MSYS) into bin for testing. Typically I have only needed a few MSYS dlls so it is not too hateful.

                        [edit: code tags added: mrjj]

                        Dave Fileccia

                        BuckwheatB 1 Reply Last reply
                        0
                        • BuckwheatB Buckwheat

                          @mzimmers ... Your solution for copying looks pretty good. I am going to remember it. You mentioned modifying DESTDIR. I actually prefer doing that as well as setting the MOC_DIR and OBJECTS_DIR to make the build where I know things are located. It also makes it clean. When doing this, I turn off the shadow build into that horrendously long path. My structure is typically as follows (only release config):

                          <root>
                             bin
                                plugins
                                ,,,
                             build
                                <subproject>
                                   release
                                      moc
                                      obj
                                ...
                                <main app>
                                   release
                                      moc
                                      obj
                             lib
                                release
                          

                          As you can see it is relatively clean and you know where things are built. I use MSYS2 for development because I can get 32 and 64 bit development. QtCreator 4.1.x for IDE.

                          I copy my 3rd party DLLs (except MSYS) into bin for testing. Typically I have only needed a few MSYS dlls so it is not too hateful.

                          [edit: code tags added: mrjj]

                          BuckwheatB Offline
                          BuckwheatB Offline
                          Buckwheat
                          wrote on last edited by
                          #28

                          @Buckwheat I wish I knew how to make indents in the forum ;D

                          Dave Fileccia

                          mrjjM 1 Reply Last reply
                          0
                          • BuckwheatB Buckwheat

                            @Buckwheat I wish I knew how to make indents in the forum ;D

                            mrjjM Offline
                            mrjjM Offline
                            mrjj
                            Lifetime Qt Champion
                            wrote on last edited by mrjj
                            #29

                            @Buckwheat
                            use the code tag ``` ( before and after)
                            and it wont eat indentation :)

                            BuckwheatB 1 Reply Last reply
                            0
                            • mrjjM mrjj

                              @Buckwheat
                              use the code tag ``` ( before and after)
                              and it wont eat indentation :)

                              BuckwheatB Offline
                              BuckwheatB Offline
                              Buckwheat
                              wrote on last edited by
                              #30

                              @mrjj Thanks!

                              Dave Fileccia

                              1 Reply Last reply
                              0
                              • mzimmersM mzimmers

                                @kshegunov said in Copying .dlls into target directory:

                                @mzimmers said in Copying .dlls into target directory:

                                libs_to_copy.files = $$(QMAKE_LIBDIR_QT)/libgcc_s_dw2-1.dll
                                libs_to_copy.path = $$(OUT_PWD)/$$(OUTDIR)
                                INSTALLS += libs_to_copy
                                

                                I don't get the error, but the file doesn't copy.

                                What about this:

                                libs_to_copy.files = C:/Qt/5.7/mingw53_32/bin/libgcc_s_dw2-1.dll
                                libs_to_copy.path = $$(OUT_PWD)
                                
                                INSTALLS += libs_to_copy
                                

                                ?

                                That gives me this error:

                                :-1: warning: libs_to_copy.path is not defined: install target not created

                                Alternatively you could try to add an additional target.

                                I may have to fall back to this, if it turns out that the INSTALLS directive doesn't work.

                                Thanks...

                                kshegunovK Offline
                                kshegunovK Offline
                                kshegunov
                                Moderators
                                wrote on last edited by kshegunov
                                #31

                                @mzimmers said in Copying .dlls into target directory:

                                That gives me this error:
                                :-1: warning: libs_to_copy.path is not defined: install target not created

                                Sorry, I might've mislead you. Try with:

                                libs_to_copy.path = $$OUT_PWD
                                

                                Notice the lack of parenthesis. It's a bit cumbersome like this, but I don't have a windows machine on hand to test. If you continue to get an error run qmake with -d and attach the output, e.g.

                                qmake -d myproject.pro
                                

                                Read and abide by the Qt Code of Conduct

                                mzimmersM 1 Reply Last reply
                                1
                                • kshegunovK kshegunov

                                  @mzimmers said in Copying .dlls into target directory:

                                  That gives me this error:
                                  :-1: warning: libs_to_copy.path is not defined: install target not created

                                  Sorry, I might've mislead you. Try with:

                                  libs_to_copy.path = $$OUT_PWD
                                  

                                  Notice the lack of parenthesis. It's a bit cumbersome like this, but I don't have a windows machine on hand to test. If you continue to get an error run qmake with -d and attach the output, e.g.

                                  qmake -d myproject.pro
                                  
                                  mzimmersM Offline
                                  mzimmersM Offline
                                  mzimmers
                                  wrote on last edited by
                                  #32

                                  @kshegunov said in Copying .dlls into target directory:

                                  Notice the lack of parenthesis. It's a bit cumbersome like this, but I don't have a windows machine on hand to test. If you continue to get an error run qmake with -d and attach the output, e.g.
                                  qmake -d myproject.pro

                                  Here's the output:

                                  link text

                                  LOTS of stuff there, and I don't understand most of it.

                                  kshegunovK 1 Reply Last reply
                                  0
                                  • mzimmersM mzimmers

                                    @kshegunov said in Copying .dlls into target directory:

                                    Notice the lack of parenthesis. It's a bit cumbersome like this, but I don't have a windows machine on hand to test. If you continue to get an error run qmake with -d and attach the output, e.g.
                                    qmake -d myproject.pro

                                    Here's the output:

                                    link text

                                    LOTS of stuff there, and I don't understand most of it.

                                    kshegunovK Offline
                                    kshegunovK Offline
                                    kshegunov
                                    Moderators
                                    wrote on last edited by
                                    #33

                                    @mzimmers said in Copying .dlls into target directory:

                                    and I don't understand most of it.

                                    No one does, perhaps with the exception of the qmake's developers. ;)
                                    Anyway, there seems to be a problem with the paths:

                                    DEBUG 1: C:/Users/mzimmers/Wideband/Peninsula/storefile_client/storefile_client.pro:17: libs_to_copy.files := /libgcc_s_dw2-1.dll
                                    DEBUG 1: C:/Users/mzimmers/Wideband/Peninsula/storefile_client/storefile_client.pro:19: libs_to_copy.path := C:/Users/mzimmers/Wideband/Peninsula/build-storefile_client-Desktop_Qt_5_7_0_MinGW_32bit-Debug
                                    ...
                                    DEBUG 1: Dependency Directories: ..\storefile_client :: . :: ..\ARM\inc :: C:\Qt\5.7\mingw53_32\mkspecs\win32-g++
                                    DEBUG 1: c:\Users\qt\work\qt\qtbase/qmake/generators/makefile.cpp:321 Failure to find /libgcc_s_dw2-1.dll in vpath ()
                                    DEBUG 1: no definition for install libs_to_copy: install target not created
                                    

                                    See that the dll file's path is truncated for some reason.

                                    Read and abide by the Qt Code of Conduct

                                    1 Reply Last reply
                                    2
                                    • mzimmersM Offline
                                      mzimmersM Offline
                                      mzimmers
                                      wrote on last edited by
                                      #34

                                      Well, look at that...it sure is.

                                      I don't know what to make of that (so to speak). Is it possible we've uncovered a bug?

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

                                        It's probably one of those lovely windows gotchas, I think it does not like the dot in 5.7, try adding quotes

                                        libs_to_copy.files = "C:/Qt/5.7/mingw53_32/bin/libgcc_s_dw2-1.dll"

                                        and make sure you rerun qmake!

                                        "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
                                        2
                                        • mzimmersM Offline
                                          mzimmersM Offline
                                          mzimmers
                                          wrote on last edited by
                                          #36

                                          Hi, Vronin -

                                          This is somewhat embarrassing. I tried your suggestion, and it worked. I looked at the compiler output and actually saw the xcopy command, and the file did copy.

                                          Unfortunately, it was copying to:

                                          C:\Users\mzimmers\build-storefile_client-Desktop_Qt_5_7_0_MinGW_32bit-Debug

                                          instead of to:

                                          C:\Users\mzimmers\build-storefile_client-Desktop_Qt_5_7_0_MinGW_32bit-Debug\debug

                                          So, I went in and fiddled with it, to no avail. I tried to put it back so it would at least re-copy, and...I can't make it work again!!

                                          I'm still encouraged, because it shows that the INSTALLS part of MinGW make does work. It's just a matter of getting the syntax in the .pro file correct.

                                          I'm trying to understand the libs_to_copy construct that I copied from somewhere else. This doesn't seem to be an ordinary qmake variable, and I can't get it to display using message(). Can you possibly point me to an explanation of it?

                                          Thanks a lot...I do think we're getting close.

                                          1 Reply Last reply
                                          1

                                          • Login

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