- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
每次在 Visual Studio 中首次构建新的 Qt 项目时,即使安装了 VS Tools,我也必须复制一些与 Qt 相关的二进制文件(Qt5Core.dll、平台文件...)。否则,当从 Visual Studio 运行时,可以正确找到 Qt5Core.dll(或调试一个),但找不到平台 DLL:
显然,当从 IDE 外部运行完成时(例如,在自动化构建的单元测试期间),它也会失败。
Qt 有一个工具可以做到这一点,称为 windeployqt
,它基本上寻找依赖项(Qt)并复制它们。例如:
c:\Qt\Qt5.12.1\bin\windeployqt c:\projects\qt-project\Release --release
将分析c:\projects\qt-project\Release
中的可执行文件,并将所需的DLL、插件、翻译和其他相关二进制文件复制到该位置。
我对如何将 windeployqt
集成到 Visual Studio 的构建工作流程中感兴趣,以便此过程是自动的(即使在不同的计算机上 checkout )。
最佳答案
您显然可以创建一个批处理文件并执行它,但请记住,您必须在编译项目之后执行此操作,因为该工具将查看可执行文件。此外,您还必须处理构建路径和 Qt 安装目录位置,以便使其跨系统可移植。
(请参阅本答案末尾的更新)
更方便的方法是将 windeployqt
配置为项目中的构建后事件(项目属性 > 构建事件 > 构建后事件)。 我在这里记录了这一点,因为我找不到任何明确的引用资料,并且我花了一段时间才弄清楚。
处理可移植性:
$(QTDIR)
:此变量扩展到当前 Qt 版本的安装路径(当然,我假设它是一个 Qt 项目,并且安装了 Qt VS Tools )。使用它来定位 windeployqt
(在 $(QTDIR)\bin\
下)。
$(OutDir)
:扩展到可执行文件的构建目录。像往常一样,引用它来处理带有空格的路径。这里的问题是 $(OutDir)
通常以反斜杠 (\
) 结尾,因此当 "$(OutDir)"
为展开后,它将创建一个转义字符 \"
,该字符将被错误地解释。为了修复它,您可以修剪前导斜杠:"$(OutDir.TrimEnd('\'))"
(credits)。
$(Configuration)
:扩展为当前配置的名称(通常是调试或发布,请阅读下面的其他配置名称)。现在,windeployqt
对于 --debug
或 --release
参数区分大小写,并且配置名称采用标题大小写。要小写它:--$(Configuration.toLower())
( credits )。这一步只是为了有一个通用命令,可以通过手动添加 --debug
或 --release
标志来跳过。
这样,完整的构建后命令如下:
"$(QTDIR)\bin\windeployqt.exe" "$(OutDir.TrimEnd('\'))" --$(Configuration.toLower())
该命令可以在所有平台和项目配置中统一应用。
现在,如果您有 Release
和 Debug
之外的其他配置,您可以:
通过相应地添加 --debug
或 --release
来修改命令,或者
为“基于调试的配置”和“基于发布的配置”创建自定义属性页,并将变量(例如 BaseConfiguration
)设置为 Debug
或Release
,然后在命令中使用这个新变量。
从 Qt VS Tools 的几个版本(不确定是哪个,但至少是 2.7.1)开始,部署工具可以直接从项目的属性表添加到构建链中:
关于visual-studio - 如何将 Qt 的 Windeployqt 集成为 Visual Studio 构建工作流程的一部分?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54788631/
我正在使用 windeployqt 为一个非常简单的 Hello World 类型 QML 应用程序创建一个具有正确依赖项的可执行文件。使用时,用命令 windeployqt . --release
我在 Release模式下构建了我的 Qt 项目并拥有 .exe 文件。我正在使用 Qt 5.7 32 位桌面版 (MSVC 2015) cmd 并运行 C:\Qt\5.7\msvc2015\bin\
通常部署一个 Qt 项目我要么: 继续运行它并找到它提示缺少的库并添加它们直到没有更多为止。 使用 dependency walker 让我完成大部分(如果不是全部),然后返回选项 1。 或者只是创建
我正在使用 windeployqt 可执行文件来准备我的安装树。该工具将所有必需的(甚至一些不必要的)dll 复制到指定的文件夹中,并对 Qt5Core.dll 进行修补以获取硬编码路径变量。以下是我
我正在尝试使用 windeployqt.exe (Qt 5.13.2) 为 CMake 3.16 生成的调试应用程序部署 dll。除了平台插件 dll 部署了 qwindows.dll 之外,所有 d
这个问题在这里已经有了答案: Deploy Qt5 QML application (8 个答案) 关闭 4 年前。 我正在尝试部署一组 QT 应用程序。在 Linux 上,所有应用程序在安装所有依
这个问题在这里已经有了答案: Deploy Qt5 QML application (8 个答案) 关闭 4 年前。 我正在尝试部署一组 QT 应用程序。在 Linux 上,所有应用程序在安装所有依
我正在尝试部署 Qt 应用程序,但每次我尝试运行 windeployqt.exe 时,我都会在 Windows 弹出窗口中收到此错误: This app can't run on your PC, t
我被告知“windeployqt”实用程序,它应该能够收集正确运行我的 Windows Qt 应用程序所需的所有 Qt/MinGW DLL。所以我试了一下。 不幸的是,我注意到它收集的文件比必要的多。
在 Windows 中,您可以运行 windeployqt.exe 来近似 Qt 应用程序的库、qml 和插件依赖项。 在 Linux 中,我可以使用 ldd 来确定库依赖性,但我还没有找到一种方法来
我有一个 qt c++ 普通程序。在 Windows 中使用 mingw8.1 gcc 作为编译器。 我可以在qt creator中运行它。 但是当我想使用 windeplotqt 部署时,它失败了:
我目前正在尝试将 Fedora 21 机器上的 Qt 应用程序交叉编译到 Windows(目前为 32 位)。编译没有问题,但部署没有问题。当然,我可以从目录中复制所有必要的文件,但我认为这是浪费时间
每次在 Visual Studio 中首次构建新的 Qt 项目时,即使安装了 VS Tools,我也必须复制一些与 Qt 相关的二进制文件(Qt5Core.dll、平台文件...)。否则,当从 Vis
每次在 Visual Studio 中首次构建新的 Qt 项目时,即使安装了 VS Tools,我也必须复制一些与 Qt 相关的二进制文件(Qt5Core.dll、平台文件...)。否则,当从 Vis
我是一名优秀的程序员,十分优秀!