Windows下使⽤VS2019静态编译Qt6.2.3源码
依赖项
cmake
需要3.16版本以上
perl
下载后安装,保证命令⾏环境中可⽤
ninja
注意,请⼀定下载使⽤win版本。如果环境中已有cygwin版本的,请不要使⽤,否则会导致编译失败。具体使⽤的是哪个,在后⾯的脚本中会显式的指出。例如这⾥⽤的是C:\
编译脚本
将脚本放到与源码相同的⽬录,然后根据实际情况在脚本中指定源码路径。注意这⾥使⽤的都是相对路径,如需使⽤绝对路径,稍微对脚本做下修改即可。
MD版本,开箱即⽤,⽆需其他处理
MD版本编译脚本:qt_build_vs2019_x86_static_md_release.bat
1@echo off
2 @REM 编译release版本
3set "BUILD_TYPE=release"
4 @REM ⽂件夹名,⽤以区分不同的版本
5set "DIR=msvc2019_x86_static_md"
6 @REM 安装⽬录,编译完成后QT库⽂件和相关⼯具链的安装位置
7set "INSTALL_DIR=%DIR%_%BUILD_TYPE%"
8 @REM 解决⽅案⽂件夹,存放编译的中间⽂件
9set "SLN_DIR=%INSTALL_DIR%_sln"
10 @REM 源码⽬录,根据实际情况填写
11set "SRC_DIR=Src"
12call "D:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Auxiliary\Build\vcvars32.bat"
13 cmake -S %SRC_DIR% -B %SLN_DIR% -DBUILD_SHARED_LIBS=OFF -DCMAKE_INSTALL_PREFIX=%INSTALL_DIR% -DCMAKE_BUILD_TYPE=%BUILD_TYPE% ^
14    -DQT_BUILD_TESTS=FALSE -DQT_BUILD_EXAMPLES=FALSE -DCMAKE_MAKE_PROGRAM=C:\ -G "Ninja"
15 cmake --build %SLN_DIR% --config %BUILD_TYPE% --parallel
16 cmake --install %SLN_DIR% --config %BUILD_TYPE% --prefix=%INSTALL_DIR%
MT版本,还需要对源码做⼀点修改,详情如下
编译前请修改⽂件:Src\qtbase\mkspecs\f
将QMAKE_CFLAGS_XXXXXXX中的MD、MDd替换为MT、MTd,如图:
MT版本编译脚本:qt_build_vs2019_x86_static_mt_release.bat
1@echo off
2 @REM 编译release版本
3set "BUILD_TYPE=release"
4 @REM ⽂件夹名,⽤以区分不同的版本
5set "DIR=msvc2019_x86_static_mt"
6 @REM 安装⽬录,编译完成后QT库⽂件和相关⼯具链的安装位置
7set "INSTALL_DIR=%DIR%_%BUILD_TYPE%"
8 @REM 解决⽅案⽂件夹,存放编译的中间⽂件
9set "SLN_DIR=%INSTALL_DIR%_sln"
10 @REM 源码⽬录,根据实际情况填写
11set "SRC_DIR=Src"
12call "D:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Auxiliary\Build\vcvars32.bat"
13 cmake -S %SRC_DIR% -B %SLN_DIR% -DBUILD_SHARED_LIBS=OFF -DCMAKE_INSTALL_PREFIX=%INSTALL_DIR% -DCMAKE_BUILD_TYPE=%BUILD_TYPE% ^
14    -DQT_BUILD_TESTS=FALSE -DQT_BUILD_EXAMPLES=FALSE -DQT_FEATURE_static_runtime=ON -DCMAKE_MAKE_PROGRAM=C:\ -G "Ninja"
15 cmake --build %SLN_DIR% --config %BUILD_TYPE%
16 cmake --install %SLN_DIR% --config %BUILD_TYPE% --prefix=%INSTALL_DIR%
双击脚本,等待其执⾏完毕,QT库将会安装在:
msvc2019_x86_static_md_release或msvc2019_x86_static_mt_release
例如:
Demo测试
新建
1cmake_minimum_required(VERSION 3.16.0)
2project(QtStaticLinkTest)
3string(APPEND CMAKE_PREFIX_PATH "D:/QT/6.2.3/6.2.3/msvc2019_x86_static_mt_release;")
4find_package(Qt6 COMPONENTS Widgets REQUIRED)
5add_compile_options(/MT)
6add_executable(hello_qt main.cpp)
7target_link_libraries(hello_qt Qt6::Widgets)
新建main.cpp
1 #include <QApplication>
2 #include <QWidget>
3int main(int argc, char *argv[])
4 {
5    QApplication app(argc, argv);
6    QWidget w;
7    w.show();
();
9 }
命令⾏执⾏:
1 cmake -S . -B sln -G "Visual Studio 16 2019" -A Win32
2 cmake --build sln --config Release
最后⽣成独⽴的可执⾏⽂件:sln\Release\,⼤⼩约12M,双击运⾏成功:
可能的问题与解答
如何切换VS环境?
脚本中有这么⼀句,作⽤就是调⽤VS⾃带的脚本设置环境,如果想使⽤不同的VS环境,那就调⽤不同的VS脚本即可,包括切换x86和x64版本。
call "D:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Auxiliary\Build\vcvars32.bat"
可以使⽤VS2017吗?
不可以。起码Qt6.2.3的源码不可以,经测试编译会失败。看上去是Qt6.2.3中使⽤了⼀些新的语法,VS2017不⽀持。
为什么CMake的generator要⽤ Ninja,⽽不直接使⽤Visual Studio 16 2019 ?
Qt官⽅⽀持的generator只有 Ninja,如下图所⽰。perl怎么下载
本地测试下来,如果强⾏使⽤ VS 的generator,也确实会导致 cmake 执⾏失败。
直接从官⽹下载qt-everywhere-src-6.2.源码可以吗?

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。