Unsolved Copying .dlls into target directory
-
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. -
@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'snmake
) 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 ofpro
files (andmkspec
s and other goodies that get included and ultimately theQT_INSTALL_EXAMPLES
is set for you). But anyway, that's another matter altogether.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 theINSTALLS
variable (although I see no reason it shouldn't).Kind regards.
-
@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.
-
@mzimmers Yes qmake should be the first one
-
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?
-
Honestly, I have no idea. Could you attach the make file and the pro you're currently using?
-
@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...
-
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 commentedINSTALLS += libs_to_copy
and usedINSTALLS += 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 withINSTALLS += libs_to_copy
. After modifying the file, don't forget to runqmake
and thenmake
,make install
. -
I tried this:
libs_to_copy = "C:/Qt/5.7/mingw53_32/bin/libgcc_s_dw2-1.dll"
INSTALLS += libs_to_copyand 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_copyI don't get the error, but the file doesn't copy.
-
@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.
-
@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...
-
@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]
-
@Buckwheat I wish I knew how to make indents in the forum ;D
-
@Buckwheat
use the code tag ``` ( before and after)
and it wont eat indentation :) -
@mrjj Thanks!
-
@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 createdSorry, 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
-
@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.proHere's the output:
LOTS of stuff there, and I don't understand most of it.
-
@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.
-
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?
-
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!