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

    fixed the typo; still doesn't work:

    TEMPLATE = app
    CONFIG += CONSOLE
    CONFIG -= qt
    TARGET = storefile
    SOURCES += \
    	storefile_client.cpp
    
    #win32:QMAKE_CXXFLAGS += /MD
    
    HEADERS += \
    	storefile_client.h \
    
    win32:LIBS += "C:\Program Files (x86)\Windows Kits\8.0\Lib\win8\um\x86\ws2_32.lib"
    
    INCLUDEPATH += "../ARM/inc/"
    
    libs_to_copy.files = $$QMAKE_LIBDIR_QT/libgcc_s_dw2-1.dll
    libs_to_copy.path = $$OUT_PWD/$$OUTDIR
    INSTALLS += libs_to_copy
    #INSTALLS += $$[QT_INSTALL_BINS]\libgcc_s_dw2-1.dll
    #INSTALLS += C:\Qt\5.7\mingw53_32\bin\libgcc_s_dw2-1.dll
    

    Oddly enough, it's copying the .o file, but not the .dll I want.

    1 Reply Last reply
    0
    • mrjjM Offline
      mrjjM Offline
      mrjj
      Lifetime Qt Champion
      wrote on last edited by mrjj
      #10

      Hi
      Im wondering if mixing

      / and  \ is ok?
       C:/Qt/5.7/mingw53_32/bin\libgcc_s_dw2-1.dll. 
                               ^
      
      mzimmersM 1 Reply Last reply
      0
      • mrjjM mrjj

        Hi
        Im wondering if mixing

        / and  \ is ok?
         C:/Qt/5.7/mingw53_32/bin\libgcc_s_dw2-1.dll. 
                                 ^
        
        mzimmersM Offline
        mzimmersM Offline
        mzimmers
        wrote on last edited by
        #11

        @mrjj said in copying .dlls into target directory:

        Hi
        Im wondering if mixing

        / and  \ is ok?
         C:/Qt/5.7/mingw53_32/bin\libgcc_s_dw2-1.dll. 
                                 ^
        

        Good question. In my hard-coded tests, I tried it with all "/" and all "" and get the same error, though.

        Does qmake have some kind of echo function where I can output the value of variables?

        Thanks.

        1 Reply Last reply
        0
        • mrjjM Offline
          mrjjM Offline
          mrjj
          Lifetime Qt Champion
          wrote on last edited by
          #12

          Ok, was just a thought.
          You can outout with

          message($$VAR)

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

            Well, I'm still stuck on this. The problem appears to be in this area:

            DESTDIR = $$(OUT_PWD)
            extra_libs.files = MY_LIB_FILES
            extra_libs.path = $$(DESTDIR)
            
            ## Tell qmake to add the moving of them to the 'install' target
            INSTALLS += extra_libs
            

            I get this error (warning):

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

            OUT_PWD appears to be OK. I don't really know what I'm doing with the variable "extra_lib" as that was just yanked from an example above. I assumed the .files and .path were properties of the variable, but now I'm questioning what I'm doing.

            Anyone able to shed some light onto this?

            Thanks.

            UPDATE:

            I just clicked on the "see more replies" part of the answer I was trying to copy -- someone claims that INSTALLS doesn't work on Windows. Can anyone confirm or deny this? I don't find anything about this limitation in the docs. I tried invoking the make from the command line, and got this:

            C:\Qt\Tools\mingw530_32\bin>.\mingw32-make.exe install
            mingw32-make: *** No rule to make target 'install'.  Stop.
            

            So I guess it is true...?

            1 Reply Last reply
            0
            • JKSHJ Offline
              JKSHJ Offline
              JKSH
              Moderators
              wrote on last edited by
              #14

              Try using hard-coded paths first and see if you can get that to work. After you succeed, replace the hard-coded paths with variables.

              (I haven't used INSTALLS before and don't currently have access to a computer to try it myself)

              Qt Doc Search for browsers: forum.qt.io/topic/35616/web-browser-extension-for-improved-doc-searches

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

                Now using:

                C:\Qt\5.7\mingw53_32\bin
                

                Same results.

                1 Reply Last reply
                0
                • mrjjM Offline
                  mrjjM Offline
                  mrjj
                  Lifetime Qt Champion
                  wrote on last edited by
                  #16

                  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 1 Reply Last reply
                  0
                  • 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

                                          • Login

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