vs2008静态编译qt4.8.6,md和mt分别编译

目录

​1.静态编译的目标

2.运行效果

2.1.md库运行效果

2.2.mt库运行效果

3.遇到的问题

3.1.1解决办法

3.1.2解决后的效果

4.vs2008 x86静态库编译

4.1.win32 md编译

4.1.1.configure说明

4.1.2.nmake && nmake install说明

4.1.3.最终执行的命令

4.1.4.qmake修改

4.1.4.1.qmake源代码代码修改

4.1.4.2.重新编译qmake


不想编译的,可以直接使用编译好的二进制文件,请参考里

qt4.8.6静态库使用环境配置icon-default.png?t=N7T8https://blog.csdn.net/binary0006/article/details/138163126

1.静态编译的目标

        使用qt开发的程序,在最终发布时如果是使用的qt动态库,需要把对应用到的qt动态库(QtCore.dll)跟程序放到一起才能运行。有的场景需要程序总文件数最少化,就需要将qt静态链接到程序中,这样在发布时就不需要带上qt动态库。

        多编译器版本编译,qt编译出来的库文件名是相同,在编译前规划将不同编译器编译的qt库以目录的形式分离开,后续在开发中根据实际情况选择对应的版本。

        Win编译区分mtmd两种形式,最终规划qt编译后的目录如下,如有其他编译器规则与此类似。(mtmd的区别自行百度)

2.运行效果

        先来体验一下,最终编译后运行的效果,测试环境:没有安装VC运行时库的winxp_sp3系统。

2.1.md库运行效果

        md编译方式是需要带上VC运行时库,否则运行会报错,下面截图为release编译后的程序运行效果。

        第1个图,VC运行时库目录名后面加了一个“1”,运行会报错。

       第2个图,使用正常的VC运行时库目录名,程序能够正常运行启动。

2.2.mt库运行效果

        mt编译方式不需要VC运行时库就能正常运行,下面编译后的程序运行效果,mt编译debug和release都能正常运行的运行。 

        静态编译qt后,使用qt开发的程序体积会变大,实际生产环境中静态库、动态库各有优劣,编译静态库是为实际生产中多一种选择,最终选择什么方式,以自己项目需求为准。 

3.遇到的问题

3.1.qmake时提示QMAKESPEC未设置

        MAKESPEC has not been set, so configuration cammot be deduced.

3.1.1产生的原因

        正常情况下,是不会有这个错误的,产生这个错误的原因是把编译完成后qt库生产的目录改了导致的。qt原本编译生产的库文件在H盘,把编译生成的库文件移动到了D盘,导致在qmake的时候找不到编译时设置的路径

        这个错误显然是需要解决的,编译出来的qt库(qmake)是需要能够随意拷贝使用的。

Microsoft Windows [版本 10.0.19045.4291]
(c) Microsoft Corporation。保留所有权利。
C:\Users\******>cd /d H:\demo\qmakelibmdtest
H:\demo\qmakelibmdtest>set PATH=D:\Qt\win32_msvc2008_libmd\bin;%PATH%
H:\demo\qmakelibmdtest>qmake -r -tp vc
QMAKESPEC has not been set, so configuration cannot be deduced.
Error processing project file: H:/demo/qmakelibmdtest/qmakelibmdtest.pro
H:\demo\qmakelibmdtest>

3.1.1解决办法

        修改qmake的源代码,重新编译qmake,注意只是重新编译qmake,具体需要修改的位置在编译章节中讲解。(目前发现修改源代码可以达到预期的效果,应该也有其他的方法可以达到预期,比如使用qmake的 -set <prop>命令 )

3.1.2解决后的效果

        使用移动到D盘的qmake能够正常生产vs的工程,工程也能正常编译(不演示)。

4.vs2008 x86静态库编译

        qt4.8.6在vs2008下编译相对来说还是比较简单的,无非就是“configure -> nmake -> nmake install”三个命令。

4.1.win32 md编译

        打开vs2008的命令行工具(默认是就是x86的编译器),进入到qt的源代码目录,执行configure --help查看编译的选项参数。调整“不编译示例、修改安装位置(-prefix必须是绝对路径,自行调整)”这两个相关参数,其他的不调整。

4.1.1.configure说明

        执行configure命令后,会先编译qmake,然后使用qmake来构建projects.pro工程,生成Makefile文件和vs的工程文件。

4.1.2.nmake && nmake install说明

        configure执行完毕后,执行nmake开始编译,等待编译完成(编译时间由机器性能决定)。编译完成之后执行nmake install,会将编译后的文件安装到configure设置的路径中。

        进入qt源代码所在目录:

4.1.3.最终执行的命令

        注意修改 -prefix为自己环境的目录,configure命令执行完毕后,会在mkspecs目录下生成default目录,修改mkspecs\default\qmake.conf文件中QMAKESPEC_ORIGINAL为相对路径。

configure -opensource -confirm-license -nomake demos -nomake examples -nomake tests -prefix H:\*****\qt4.8.6\win32_msvc2008_libmd -mp -debug-and-release -static
#修改mkspecs\default\qmake.conf文件中QMAKESPEC_ORIGINAL为相对路径
nmake
nmake install

4.1.4.qmake修改

4.1.4.1.qmake源代码代码修改

        前面“遇到的问题”中说过,编译qt后,拷贝qt的头文件和库文件到其他目录,使用qmake会失败,此处使用修改qmake源代码的方式来解决此问题。

\src\corelib\global\qconfig.cpp,修改8-18行代码如下

static const char qt_configure_prefix_path_str       [512 + 12] = "qt_prfxpath=..";
static const char qt_configure_documentation_path_str[512 + 12] = "qt_docspath=doc";
static const char qt_configure_headers_path_str      [512 + 12] = "qt_hdrspath=include";
static const char qt_configure_libraries_path_str    [512 + 12] = "qt_libspath=lib";
static const char qt_configure_binaries_path_str     [512 + 12] = "qt_binspath=bin";
static const char qt_configure_plugins_path_str      [512 + 12] = "qt_plugpath=plugins";
static const char qt_configure_imports_path_str      [512 + 12] = "qt_impspath=imports";
static const char qt_configure_data_path_str         [512 + 12] = "qt_datapath=";
static const char qt_configure_translations_path_str [512 + 12] = "qt_trnspath=translations";
static const char qt_configure_examples_path_str     [512 + 12] = "qt_xmplpath=examples";
static const char qt_configure_demos_path_str        [512 + 12] = "qt_demopath=demos";

 \src\corelib\global\qlibraryinfo.cpp,增加482-484行代码(此处为非必改)

#if defined(_MSC_VER)
    ret = ret.replace("/", "\\");
#endif
4.1.4.2.重新编译qmake

        使用vs的命令行工具,进到qmake所在的目录,执行命令nmake clean && nmake,编译完成后拷贝qmake.exe到D盘对应位置,重新qmake工程会成功。

Setting environment for using Microsoft Visual Studio 2008 x86 tools.
D:\Program Files (x86)\Microsoft Visual Studio 9.0\VC>cd /d H:\****\qt4.8.6\qmake
H:\*****\qt4.8.6\qmake>nmake clean && nmake

Microsoft Windows [版本 10.0.19045.4291]
(c) Microsoft Corporation。保留所有权利。
C:\Users\*******>cd /d H:\demo\qmakelibmdtest
H:\demo\qmakelibmdtest>set PATH=D:\Qt\win32_msvc2008_libmd\bin;%PATH%
H:\demo\qmakelibmdtest>qmake -r -tp vc
QMAKESPEC has not been set, so configuration cannot be deduced.
Error processing project file: H:/demo/qmakelibmdtest/qmakelibmdtest.pro
H:\demo\qmakelibmdtest>qmake -r -tp vc
Reading H:/demo/qmakelibmdtest/qtgui_libmd_test/qtgui_libmd_test.pro
H:\demo\qmakelibmdtest>

4.2.win32 mt编译

4.2.1.独立源代码目录

        编译mt时,将源代码重新解压一份,避免与之前md编译的混用,可能会出现莫名奇妙的错误。

4.2.2.修改配置文件

        将配置文件中-MD的地方修改为-MT。

 

4.2.3.编译

        编译的过程与md编译的相同,唯一不同的地方在于configure时设置的目录调整为mt的。具体编译过程参考md编译即可。

configure -opensource -confirm-license -nomake demos -nomake examples -nomake tests -prefix H:\*****\qt4.8.6libmt\win32_msvc2008_libmt -mp -debug-and-release -static

configure -opensource -confirm-license -nomake demos -nomake examples -nomake tests -prefix H:\*****\qt4.8.6libmt\win32_msvc2008_libmt -mp -debug-and-release -static

  • 16
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值