Unsolved Copying .dlls into target directory
-
@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!
-
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.
-
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.
-
@mzimmers said in Copying .dlls into target directory:
$$(OUT_PWD)
It's not defined. Try $$OUT_PWD instead.
-
@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...
-
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/
-
@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.