windows 命令行下使用msvc编译qt程序

我的环境是qt5.9.6 + vs2015

1.首先要再命令下执行

   "C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\vcvarsall.bat" amd64_x86 

2. 然后 在代码路径下执行  

    qmake cmdCompileTest.pro -spec win32-msvc

3. 设置jom的路径添加到系统环境变量,比如我的电脑是E:\qt5.9\Tools\QtCreator\bin,然后执行 

   jom qmake_all
   jom.exe -f Makefile.Release

就能编译出release的exe程序

 

此处是一个完整的脚本(build.bat)

CALL "C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\vcvarsall.bat" amd64_x86 
echo vcvarsall finished
qmake cmdCompileTest.pro -spec win32-msvc
jom qmake_all
jom.exe -f Makefile.Release

 

在脚本中记得要用call执行vcvarsall.bat,不然直接执行vcvarsall.bat,不会继续往下运行。

 

jom的备注(此处摘录的他人的理解):

linux下使用make,而在windows上面使用nmake,是vs提供的一个东西,
    但是有很个坑的事,就是nmake不支持-j这个参数,,也是就是说它是单线程编译.
   Qt为了解决这样子的一个问题,弄出一个jom.exe,这和make的功能基本是一样的,但是他比nmake多出来的就是,-j这个参数.也就是说它支持多线程编译.
   至于和make的其他区别我也不清楚,如果你不特别追究的话,简单理解为 jom==make==nmake*x

<think>我们参考用户提供的引用信息,特别是引用[1]中提到的编译QT5.14.2并生成MSVC2015环境下静态库的指南,以及引用[2][3]中关于构建套件配置的内容。用户询问的是使用MSVC编译Qt库的具体步骤和配置方法。注意:用户没有指定Qt版本,但引用中提到了Qt5.14.2和Qt6.8.2,因此我们将以Qt5.14.2为例(因为引用[1]有详细指南),同时也会提到Qt6的差异(因为引用[5]是Qt6.8)。步骤概览:1.安装必要的软件:VisualStudio、Qt源码、Perl、Python等。2.配置环境:打开VS开发人员命令提示符,设置环境变量。3.配置Qt源码:运行configure脚本,指定参数(如安装路径、是否静态库、跳过某些模块等)。4.编译与安装:使用nmake进行编译和安装。5.验证:检查安装目录,测试编译示例项目。详细步骤:一、准备工作1.安装VisualStudio:例如VS2015(对应MSVC2015)、VS2017、VS2019或VS2022。安装时选择“C++桌面开发”工作负载。2.获取Qt源码:从Qt官网下载所需版本的源码,例如Qt5.14.2的源码包(qt-everywhere-src-5.14.2.zip)并解压。或者使用在线安装器(QtInstaller)下载源码。3.安装Perl:从StrawberryPerl官网下载并安装,因为Qt的配置过程需要Perl。4.安装Python:Qt5.14.2需要Python2.7,而Qt6需要Python3.x。注意:根据引用[1]和[3],Qt5.14.2可能要求Python2.7,但Qt6要求Python3.6+。二、配置编译环境1.打开VS开发人员命令提示符:在开始菜单中找到对应版本的命令提示符,例如“VS2015x64NativeToolsCommandPrompt”(根据目标架构选择x86或x64)。2.设置环境变量:确保Perl和Python的可执行文件路径在PATH环境变量中。例如(假设Perl安装在D:\StrawberryPerl,Python2.7安装在C:\Python27):```batsetPATH=D:\StrawberryPerl\perl\bin;%PATH%setPATH=C:\Python27;%PATH%```三、配置Qt源码进入Qt源码目录,运行configure.bat(Windows下)并指定参数。示例(Qt5.14.2,编译为静态库,安装到D:\Qt\5.14.2\msvc2015_static):```batconfigure.bat-static-prefix"D:\Qt\5.14.2\msvc2015_static"-opensource-confirm-license-platformwin32-msvc-mp-nomakeexamples-nomaketests```参数说明:-`-static`:构建静态库(如需要动态库则去掉此选项)-`-prefix`:指定安装路径-`-opensource`:使用开源版本-`-confirm-license`:自动确认许可证-`-platformwin32-msvc`:指定平台为MSVC(自动检测VS版本,也可用`-platformwin32-msvc2015`明确指定)-`-mp`:启用多核编译编译使用多线程)-`-nomakeexamples-nomaketests`:跳过示例和测试,加速编译注意:Qt6的配置命令类似,但Qt6的模块化更强,可以通过`-skip`跳过不需要的模块(如`-skipqtwebengine`)。四、编译与安装在配置完成后,执行:```batnmake#单线程编译,耗时很长或nmake/j8#使用8个线程编译```编译完成后,执行安装:```batnmakeinstall```五、验证1.检查安装目录:在`-prefix`指定的路径下,应包含bin、lib、include等目录。2.测试:使用qmake编译一个简单的Qt项目,确保能正确链接。六、常见问题1.错误:找不到Python或Perl:确保环境变量PATH设置正确,并且在同一个命令提示符窗口中执行configure。2.错误:编译过程中内存不足:关闭其他程序,或者减少nmake的线程数(如使用nmake/j4)。3.错误:模块缺失(如WebEngine):WebEngine模块需要额外的依赖(如WinSDK、LLVM/Clang),可参考官方文档或跳过该模块。七、在QtCreator中使用编译好的Qt库1.打开QtCreator,进入“工具”->“选项”->“Kits”。2.在“QtVersions”标签页中添加新编译Qt版本(指向qmake.exe,例如D:\Qt\5.14.2\msvc2015_static\bin\qmake.exe)。3.在“Kits”标签页中,添加或修改构建套件,选择对应的编译器(MSVC2015)、调试器(需要安装WindowsSDK中的调试工具)和Qt版本。注意:引用[3]提到,如果构建套件中调试器缺失,需要安装WindowsSDK并选择调试工具。八、编译动态库与静态库的差异动态库:默认配置,编译时间较短,生成.dll和.lib文件。静态库:需要添加`-static`选项,编译时间较长,生成静态库文件(.lib),最终应用程序可独立运行(但需注意LGPL协议对静态链接的限制)。九、关于Qt6的补充对于Qt6,配置命令基本一致,但需要注意:-需要Python3.6+-配置参数可能略有不同,例如Qt6默认使用CMake作为构建系统(但这里我们仍然使用nmake,因为配置脚本会生成Makefile)-可以通过`-qt-host-path`指定宿主机的Qt路径(如果已经安装了一个Qt用于构建)示例(Qt6.8.2,动态库):```batconfigure.bat-prefix"D:\Qt\6.8.2\msvc2022_x64"-opensource-confirm-license-platformwin32-msvc-nomakeexamples-nomaketests```十、分模块编译(可选)如果只需要编译部分模块(如qttools),可以在整个Qt基础库(qtbase)编译安装后,进入相应模块目录,用qmake生成Makefile,然后nmake。示例(在编译安装好qtbase后):```batcdqttoolsD:\Qt\6.8.2\msvc2022_x64\bin\qmake.exenmakenmakeinstall```参考文献:[^1]提供了编译Qt5.14.2静态库的指南。[^2][^3]提供了构建套件配置的说明。[^5]展示了在Qt6.8下编译QWT库(基于MSVC)的过程,其中构建套件选择等步骤类似。注意事项:1.编译过程需要大量时间和磁盘空间(建议预留50GB以上)。2.建议仔细阅读源码目录下的README和INSTALL文件。相关问题:1.如何解决QtMSVC编译过程中出现的内存不足问题?2.如何配置QtCreator以使用编译Qt库(MSVC版本)?3.编译Qt静态库和动态库有哪些主要区别?在协议许可方面有什么需要注意的?4.如何跳过某些模块(如QtWebEngine)来加速编译?5.在Qt6中,使用MSVC编译Qt5有哪些主要不同点?</think>### 使用 MSVC 编译 Qt 库的详细步骤 #### 一、准备工作 1. **安装 Visual Studio** - 安装对应版本(如 MSVC2015/2017/2022),勾选 **"C++ 桌面开发"** 工作负载 - 确保包含 Windows SDK(版本需匹配 Qt 要求)[^1][^2] 2. **获取 Qt 源码** ```bash # 官网下载源码包(推荐) https://download.qt.io/archive/qt/ # 或 Git 克隆(示例 Qt 5.14.2) git clone git://code.qt.io/qt/qt5.git git checkout v5.14.2 perl init-repository --module-subset=qtbase,qttools ``` 3. **安装依赖工具** | 工具 | 要求 | 下载地址 | |------|------|----------| | Perl | 5.12+ | [Strawberry Perl](http://strawberryperl.com/) | | Python | Qt5: 2.7+<br>Qt6: 3.6+ | [Python官网](https://www.python.org/downloads/) | #### 二、配置编译环境 1. 打开 **VS 开发者命令行**(根据架构选择): - x86: `VCVARSALL.BAT x86` - x64: `VCVARSALL.BAT x64_amd64` 2. 设置环境变量: ```bat :: 示例路径,根据实际安装修改 set PATH=C:\StrawberryPerl\perl\bin;%PATH% set PATH=C:\Python27;%PATH% :: Qt5 用 Python2.7 ``` #### 三、配置 Qt 源码 进入源码目录执行配置命令: ```bat configure.bat -prefix "D:\Qt\5.14.2\msvc2015" ^ -opensource -confirm-license ^ -platform win32-msvc ^ -static :: 构建静态库[^1] ^ -mp :: 启用多核编译 ^ -nomake examples ^ -nomake tests ^ -skip webengine :: 可选:跳过复杂模块 ``` **关键参数说明**: - `-static`:生成静态库(默认动态库) - `-platform win32-msvc`:指定 MSVC 编译器 - `-prefix`:安装路径(建议不含空格) #### 四、编译与安装 ```bat nmake /j8 :: 使用 8 线程编译(根据 CPU 核心数调整) nmake install :: 安装到 -prefix 指定目录 ``` **编译时间参考**: - Qt5 基础模块:1-2 小时 - 完整模块:3-5 小时 #### 五、验证安装 1. 检查生成文件: ``` D:\Qt\5.14.2\msvc2015 ├── bin # qmake.exe, moc.exe ├── lib # Qt5Core.lib, Qt5Gui.lib └── include # 头文件 ``` 2. 测试编译: ```bat qmake -v # 应显示 MSVC 版本 ``` #### 六、Qt Creator 配置 1. **添加 Qt 版本** 工具 → 选项 → Kits → Qt Versions → 添加 `D:\Qt\5.14.2\msvc2015\bin\qmake.exe` 2. **配置构建套件** ```plaintext 编译器: MSVC2015 x64 Qt 版本: 新添加的版本 调试器: Windows SDK 的 cdb.exe[^3] ``` ![构建套件配置示例](https://example.com/kit-config.png)[^2][^3] #### 七、常见问题解决 1. **Python 路径错误** 显式指定路径: ```bat configure.bat -python C:\Python27\python.exe ``` 2. **LNK1181 链接错误** 检查环境变量是否包含 SDK 路径: ```bat :: 查看包含路径 echo %INCLUDE% echo %LIB% ``` 3. **调试器缺失** 安装 Windows SDK 时勾选 **Debugging Tools for Windows**[^3] > **重要提示**:完整编译指南参考 Qt 官方文档:[Building Qt Sources](https://doc.qt.io/qt-5/windows-building.html)[^1] --- ### 相关问题 1. 如何为 MSVC 编译Qt 静态库配置 OpenCV?[^4] 2. 使用 MSVC 编译第三方库(如 QWT)有哪些注意事项?[^5] 3. Qt 静态库和动态库在 MSVC 环境下的性能差异是什么? 4. 如何解决 MSVC 编译 Qt WebEngine 模块时的依赖问题? 5. 多版本 MSVC 编译器并存时如何管理 Qt 构建套件?[^2]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值