5

I am using windeployqt to create an executable with the correct dependencies for a very simple Hello World type QML application. When using this, with the command

windeployqt . --release --qmldir D:\Documents\QT-Projects\HelloQML

in a folder with the executable in. This works fine, and I can run the executable with no problem. However, I have found that I can delete many of the files and folders in the directory with no consequence on running the program. For comparison, here is the original folder contents. Original folder And here is the folder after I have deleted all of the things I could, while still allowing the program to run (I did not try deleting anything in any of the subfolders). Cleaned folder Is there a way for windeployqt to not copy so many unnecessary items?

Josh Wood
  • 1,598
  • 3
  • 16
  • 21
  • This issue is old, and I got here looking for a solution to a similar problem. However, I must add that just because you can run the app on your PC doesn't mean someone else could do that on theirs. The application looks for `dll` files in the executable folder and then in other windows folders. If you installed the Qt complier, it will find the `dll` files there. So you will be able to run the app on your PC, but a PC without qt installed will not be able to. – Curtwagner1984 Mar 09 '22 at 14:39

2 Answers2

12

If you use one of the latest Qt versions you can select which files not to copy.

A binary which doesn't use translations and OpenGL, can for example use:

windeployqt.exe C:\sample\sample.exe --no-translations --no-opengl-sw

For more information you can run:

windeploy --help

Usage: windeployqt [options] [files]
Qt Deploy Tool 5.12.0

The simplest way to use windeployqt is to add the bin directory of your Qt
installation (e.g. <QT_DIR\bin>) to the PATH variable and then run:
  windeployqt <path-to-app-binary>
If ICU, ANGLE, etc. are not in the bin directory, they need to be in the PATH
variable. If your application uses Qt Quick, run:
  windeployqt --qmldir <path-to-app-qml-files> <path-to-app-binary>

Options:
  -?, -h, --help            Displays this help.
  -v, --version             Displays version information.
  --dir <directory>         Use directory instead of binary directory.
  --libdir <path>           Copy libraries to path.
  --plugindir <path>        Copy plugins to path.
  --debug                   Assume debug binaries.
  --release                 Assume release binaries.
  --pdb                     Deploy .pdb files (MSVC).
  --force                   Force updating files.
  --dry-run                 Simulation mode. Behave normally, but do not
                            copy/update any files.
  --no-patchqt              Do not patch the Qt5Core library.
  --no-plugins              Skip plugin deployment.
  --no-libraries            Skip library deployment.
  --qmldir <directory>      Scan for QML-imports starting from directory.
  --no-quick-import         Skip deployment of Qt Quick imports.
  --no-translations         Skip deployment of translations.
  --no-system-d3d-compiler  Skip deployment of the system D3D compiler.
  --compiler-runtime        Deploy compiler runtime (Desktop only).
  --no-compiler-runtime     Do not deploy compiler runtime (Desktop only).
  --webkit2                 Deployment of WebKit2 (web process).
  --no-webkit2              Skip deployment of WebKit2.
  --json                    Print to stdout in JSON format.
  --angle                   Force deployment of ANGLE.
  --no-angle                Disable deployment of ANGLE.
  --no-opengl-sw            Do not deploy the software rasterizer library.
  --list <option>           Print only the names of the files copied.
                            Available options:
                             source:   absolute path of the source files
                             target:   absolute path of the target files
                             relative: paths of the target files, relative
                                       to the target directory
                             mapping:  outputs the source and the relative
                                       target, suitable for use within an
                                       Appx mapping file
  --verbose <level>         Verbose level (0-2).

Qt libraries can be added by passing their name (-xml) or removed by passing
the name prepended by --no- (--no-xml). Available libraries:
bluetooth concurrent core declarative designer designercomponents enginio
gamepad gui qthelp multimedia multimediawidgets multimediaquick network nfc
opengl positioning printsupport qml qmltooling quick quickparticles quickwidgets

script scripttools sensors serialport sql svg test webkit webkitwidgets
websockets widgets winextras xml xmlpatterns webenginecore webengine
webenginewidgets 3dcore 3drenderer 3dquick 3dquickrenderer 3dinput 3danimation
3dextras geoservices webchannel texttospeech serialbus webview

Arguments:
  [files]                   Binaries or directory containing the binary.
user3606329
  • 2,405
  • 1
  • 16
  • 28
2

Some of these files may be needed when deploying your Application to another PC. For Example you deleted the opengl32sw.dll. I found that this dll is not present on all PCs and needs to be part of the installation.

Mailerdaimon
  • 6,003
  • 3
  • 35
  • 46
  • I thought that if I apply --no-opengl-sw option and that library doesn't exist in the deployment folder, it already does not run in the developer machine. I am wrong? (provided that opengl32sw.dll does not exist in path) – atakli Mar 28 '22 at 12:08