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 29.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.
  • 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
                            • mzimmersM Offline
                              mzimmersM Offline
                              mzimmers
                              wrote on last edited by
                              #37

                              Found it!

                              The problem was the trailing backslash in the definition of:

                              libs_to_copy.path = "C:\Users\mzimmers\Wideband\Peninsula\build-storefile_client-Desktop_Qt_5_7_0_MinGW_32bit-Debug\"
                              

                              This occurs whether or not I enclose the path in double quotes. Seems like a bug to me...anyone disagree?

                              There's also the issue of why this line:

                              libs_to_copy.path = $$(OUT_PWD)
                              

                              results in an error message ":-1: warning: libs_to_copy.path is not defined: install target not created."

                              But, at least I've solved the problem that prompted me to start this thread.

                              THANK YOU TO EVERYONE WHO PARTICIPATED IN THIS.

                              kshegunovK 1 Reply Last reply
                              2
                              • mzimmersM mzimmers

                                Found it!

                                The problem was the trailing backslash in the definition of:

                                libs_to_copy.path = "C:\Users\mzimmers\Wideband\Peninsula\build-storefile_client-Desktop_Qt_5_7_0_MinGW_32bit-Debug\"
                                

                                This occurs whether or not I enclose the path in double quotes. Seems like a bug to me...anyone disagree?

                                There's also the issue of why this line:

                                libs_to_copy.path = $$(OUT_PWD)
                                

                                results in an error message ":-1: warning: libs_to_copy.path is not defined: install target not created."

                                But, at least I've solved the problem that prompted me to start this thread.

                                THANK YOU TO EVERYONE WHO PARTICIPATED IN THIS.

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

                                @mzimmers said in Copying .dlls into target directory:

                                $$(OUT_PWD)

                                It's not defined. Try $$OUT_PWD instead.

                                Read and abide by the Qt Code of Conduct

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

                                  @kshegunov : yes, that was it. Thank you. I guess I'm still not clear on the rules of parsing variables.

                                  I do have one remaining glitch: one of the three files I want to copy produces an error:

                                  copy /y C:\Qt\5.7\mingw53_32\bin\libgcc_s_dw2-1.dll C:\Users\mzimmers\Wideband\Peninsula\build-storefile_client-Desktop_Qt_5_7_0_MinGW_32bit-Debug\debug
                                          1 file(s) copied.
                                  copy /y C:\Qt\5.7\mingw53_32\bin\libwinpthread-1.dll C:\Users\mzimmers\Wideband\Peninsula\build-storefile_client-Desktop_Qt_5_7_0_MinGW_32bit-Debug\debug
                                          1 file(s) copied.
                                  copy /y C:\Qt\5.7\mingw53_32\bin\libstdc++-6.dll C:\Users\mzimmers\Wideband\Peninsula\build-storefile_client-Desktop_Qt_5_7_0_MinGW_32bit-Debug\debug
                                  The system cannot find the file specified.
                                  

                                  This file fails to copy whether it's the first, second or last file in the list. It also occurs whether I form libs_to_copy.files with three assignments, or one (multi-line).
                                  Somehow I suspect it's the "+" in the filename. I made a copy of this dll without the "+" characters, and it worked. Is there some way to escape them in the string?"

                                  Found this: it's a known problem. Not sure what to make of it...

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

                                    This is due to a bug in Qt: https://bugreports.qt.io/browse/QTBUG-16372 but the solution is not easy to implement, see https://codereview.qt-project.org/#/c/85161/
                                    This was the reason I first started using CMake as a build tool instead of qmake and now I wouldn't go back.

                                    KDE is using Cmake.

                                    An alternative (but I never tried it) is Qt Build system: http://doc.qt.io/qbs/

                                    "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
                                    • mzimmersM mzimmers

                                      @kshegunov : yes, that was it. Thank you. I guess I'm still not clear on the rules of parsing variables.

                                      I do have one remaining glitch: one of the three files I want to copy produces an error:

                                      copy /y C:\Qt\5.7\mingw53_32\bin\libgcc_s_dw2-1.dll C:\Users\mzimmers\Wideband\Peninsula\build-storefile_client-Desktop_Qt_5_7_0_MinGW_32bit-Debug\debug
                                              1 file(s) copied.
                                      copy /y C:\Qt\5.7\mingw53_32\bin\libwinpthread-1.dll C:\Users\mzimmers\Wideband\Peninsula\build-storefile_client-Desktop_Qt_5_7_0_MinGW_32bit-Debug\debug
                                              1 file(s) copied.
                                      copy /y C:\Qt\5.7\mingw53_32\bin\libstdc++-6.dll C:\Users\mzimmers\Wideband\Peninsula\build-storefile_client-Desktop_Qt_5_7_0_MinGW_32bit-Debug\debug
                                      The system cannot find the file specified.
                                      

                                      This file fails to copy whether it's the first, second or last file in the list. It also occurs whether I form libs_to_copy.files with three assignments, or one (multi-line).
                                      Somehow I suspect it's the "+" in the filename. I made a copy of this dll without the "+" characters, and it worked. Is there some way to escape them in the string?"

                                      Found this: it's a known problem. Not sure what to make of it...

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

                                      @mzimmers said in Copying .dlls into target directory:

                                      I guess I'm still not clear on the rules of parsing variables.

                                      $(XXX) is the environment variable XXX, while $XXX is the qmake variable XXX.

                                      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:

                                        I guess I'm still not clear on the rules of parsing variables.

                                        $(XXX) is the environment variable XXX, while $XXX is the qmake variable XXX.

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

                                        @kshegunov : thank you. So, what exactly is the libs_to_copy construct that I'm using? I can't find any documentation on that.

                                        kshegunovK 1 Reply Last reply
                                        0
                                        • mzimmersM mzimmers

                                          @kshegunov : thank you. So, what exactly is the libs_to_copy construct that I'm using? I can't find any documentation on that.

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

                                          @mzimmers
                                          It's just a variable as far as I know. You can name it however you like and you (should) be able to use more than one as well. E.g.:

                                          mingw_installs.files = "C:/Qt/5.7/mingw53_32/bin/libgcc_s_dw2-1.dll" "C:/Qt/5.7/mingw53_32/bin/stdc++6.dll" 
                                          mingw_installs.path = $$OUT_PWD
                                          
                                          myown_installs.files = "C:/AdditionalDepDir/somefileIneed.txt"
                                          myown_installs.path = $$OUT_PWD
                                          
                                          INSTALLS += mingw_installs myown_installs
                                          

                                          (do take my qmake knowledge with a grain of salt, though, I'm by no means an expert)

                                          Read and abide by the Qt Code of Conduct

                                          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