我有一个在Qt Creator中创建的简单项目(使用Qt SDK 1.1.4安装) . 它在Qt Creator中运行得很好,但如果我然后浏览到Windows中的输出目录并双击EXE,我将收到如下错误:
The program can't start because QtCored4.dll is missing from your computer.
Try reinstalling the program to fix this problem.
这显然是因为Qt不在我的PATH中(我不希望它,如果我的计算机上有多个版本的Qt),Qt Creator / qmake没有将Qt DLL复制到项目输出 .
我想要做的是使用qmake将必要的Qt文件复制到项目输出目录 - 无论它在哪里 . 我该怎么做呢?
(我尝试在qmake中创建一个自定义目标,但我不会太过分......)
UPDATE July 19, 2016: 为了澄清,上述帖子与Qt4有关 . 在Qt5上,您应该考虑调用windeployqt . 此Qt5工具将读取您的二进制文件,确定您需要哪些Qt5运行时文件,并将它们复制到二进制目录 . 另请注意,它将修复Qt5 :: Core库中特定于PC的绝对路径 - 因此,除非您想自己提供qt.conf文件,否则使用此工具基本上是强制性的 .
4 回答
好的,这是一个丑陋的黑客:
以下是我不喜欢的一些内容:
使用%QTDIR%环境变量;在实际运行复制命令之前,不会评估此变量 . 看起来像QMAKE_LIBS_QT_DLL这样的东西会更合适,但由于某些原因我无法使其工作 .
硬编码"debug"和"release"名称;似乎应该有某种变量用于此 .
使用"copy"命令调用环境 .
我会接受另一个答案,如果有人可以清理这一点,例如缩短它和/或解决我的一些问题,或者只是找到更好的方法 .
一个更清洁的方法,但它需要在
make
后执行make install
. 它可以在Windows上运行,但需要调整其他平台 .如果仅为调试运行qmake,则所有输出都将进入./debug . 如果只是为了发布,所有输出都进入./release . 如果两者都进入./bin .
我注意到在QtCreator中启用阴影构建导致可执行文件不会在DESTDIR中结束 . 我不太清楚为什么 .
Copy Dependencies with windeployqt
或 Copy dependencies manually
参考:http://doc.qt.io/qt-5/qmake-variable-reference.html#deployment
如果您需要跨平台识别先决条件/依赖项,请查看CMake的
getPrerequisites()
. 它使用dumpbin
,objbin
,ldd
,otool
来识别依赖项 .参考:https://cmake.org/cmake/help/v3.0/module/GetPrerequisites.html
我遇到了同样的问题,jwernerny's solution给了我很多帮助 . 但是,我在Window 7上使用了Shadow Build,它需要更多的tweeking .
我还需要根据当前配置设置
DESTDIR
.在我的情况下,我想复制
*.qml
文件,这就是我实现它的方式:EDIT :
由于我使用Shadow Build,我需要使用
$$OUT_PWD
来获取输出文件夹 .