VS2013编译Qt 5.7.0(兼容XP)

喜欢ヅ旅行 2022-04-18 01:46 839阅读 0赞

注意:编译时报以下错误

E:\QtXP\qtbase\src\3rdparty\angle\src\libANGLE/renderer/d3d/d3d11/renderer11_utils.h(33) : error C2065: “ID3D11RenderTargetView”: 未声明的标识符

解决方法为在第4步完成后,修改文件:E:\QtXP\qtbase\src\angle\src\config.pri,注释掉43行:#equals(QMAKE_TARGET_OS, xp): CONFIG -= angle_d3d11,然后再执行第5步及后面的操作.


  1. 下载Qt源码

https://download.qt.io/archive/qt/5.7/5.7.0/single/qt-everywhere-opensource-src-5.7.0.zip

  1. 将源码解压缩,我放到了E盘根目录,然后将qt-everywhere-opensource-src-5.7.0文件夹名字改为QtXP

  2. 在Qt目录下新建文件build.bat,内容如下:

    REM Set up \Microsoft Visual Studio 2013, where is \c amd64, \c x86, etc.
    CALL “C:\ProgramFiles\Microsoft Visual Studio 12.0\VC\vcvarsall.bat” x86
    SET _ROOT=E:\QtXP
    SET PATH=%_ROOT%\qtbase\bin;%_ROOT%\gnuwin32\bin;%PATH%
    REM Uncomment the below line when using a git checkout of the source repository
    REM SET PATH=%_ROOT%\qtrepotools\bin;%PATH%
    SET QMAKESPEC=win32-msvc2013
    SET _ROOT=

  3. 打开cmd窗口,cd进入E:\QtXP,输入build.bat初始化编译环境

  4. 输入命令:configure -prefix “E:\QtXP\build” -platform win32-msvc2013 -target xp -nomake tests -nomake examples -skip qtwebengine,初始化编译配置

  5. 输入命令:nmake,开始漫长的编译…………

编译完成后,可以在目录E:\QtXP\qtbase\lib下找到Qt5Core.dll, Qt5Gui.dll等链接库文件,在目录E:\QtXP\qtbase\plugins\platforms下找到qwindows.dll等链接库文件. 也可以使用命令: nmake install 将头文件,库文件,exe和dll文件等安装到目录E:\QtXP\build


//===============================================================================================

// 静态编译

打开 E:\QtXP\qtbase\mkspecs\common\msvc-desktop.conf

QMAKE_CFLAGS_RELEASE = -O2 -MD
QMAKE_CFLAGS_RELEASE_WITH_DEBUGINFO += -O2 -MD -Zi
QMAKE_CFLAGS_DEBUG = -Zi -MDd

改为

QMAKE_CFLAGS_RELEASE = -O2 -MT
QMAKE_CFLAGS_RELEASE_WITH_DEBUGINFO += -O2 -MT -Zi
QMAKE_CFLAGS_DEBUG = -Zi -MTd

即将MD改成MT,MDd改成MTd。动态改成静态

使用命令:configure -prefix “E:\QtXP\build” -platform win32-msvc2013 -target xp -static -nomake tests -nomake examples -skip qtwebengine

VS2013工程需要做以下改动以进行静态链接

  1. 属性 -> C/C++ -> 预处理器 -> 预处理器定义

    QT_DLL 修改为 QT_STATIC

  2. 属性 -> 链接器 -> 输入 -> 附加依赖项:

    dxguid.lib
    d3d9.lib
    kernel32.lib
    user32.lib
    shell32.lib
    uuid.lib
    ole32.lib
    advapi32.lib
    ws2_32.lib
    gdi32.lib
    comdlg32.lib
    oleaut32.lib
    imm32.lib
    winmm.lib
    qtmaind.lib
    Qt5Cored.lib
    Qt5Guid.lib
    Qt5Widgetsd.lib
    qtpcred.lib
    libEGLd.lib
    libGLESv2d.lib
    Qt5OpenGLd.lib
    translatord.lib
    preprocessord.lib
    qwindowsd.lib
    qtfreetyped.lib
    qtharfbuzzngd.lib
    Qt5PlatformSupportd.lib

  3. 修改main.cpp

    include

    Q_IMPORT_PLUGIN(QWindowsIntegrationPlugin);

Qt5.7.0配置选项(configure非常详细的参数)

转载自:https://blog.csdn.net/caoshangpa/article/details/53706801

configure是一个命令行工具,用于配置Qt编译到指定平台。configure必须运行于Qt源码根目录。当运行configure时,编译源码使用的是所选工具链中的make工具。

一.源码目录、编译目录和安装目录

源码目录就是包含源码的目录。编译目录是包含Makefiles文件、object文件和其他中间文件的目录。安装目录是二进制文件和库文件安装的目录。

当编译目录和源码目录不一样时,称为影子编译(shadow build),比如说,Qt Creator默认是使用影子编译来编译工程的。这里也可以使用影子编译,方法就是新建一个目录,然后cd到该目录中运行configure,如下所示。

mkdir ~/qt-build
cd ~/qt-build
~/qt-source/configure
此时,configure时生成的Makefiles文件,以及编译时生成的中间文件都会拷贝到qt-build目录。不仅如此,通过影子编译,可以同时进行多个不同配置选项的编译过程,互不影响。
默认的安装目录和平台相关,但是在configure时,可以通过-prefix选项指定安装目录,比如./configure -prefix /opt/Qt-5.7。这样一来,在执行make install指令时,编译完成的bin、lib或者其他子目录就会拷贝到/opt/Qt-5.7目录中。
二.包含和排除Qt模块

通过configure,可以包含或排除指定的Qt模块。需要注意的是,许多模块依赖于其他的模块,不恰当的配置选项会导致依赖问题。

1.排除Qt模块

使用configure的-skip选项可以排除Qt模块,一般情况下模块名就是源码目录中对应的子目录名。有些子目录会包含多个模块,比如说qtconnectivity目录就包含了Qt NFC模块和Qt Bluetooth模块,排除这两个模块需要将-skip qtconnectivity作为配置参数,如下所示。

./configure -skip qtconnectivity
2.包含或排除特性
-feature- 和 -no-feature-选项用于包含和排除特性。可用的都被罗列在tbase/src/corelib/global/qfeatures.txt文件中。比如,要禁用accessibility特性,可用使用-no-feature-accessibility选项,如下所示。
./configure -no-feature-accessibility
三.第三方库
Qt源码中包含了一些第三方库,如果想使用Qt自带的第三方库,可用通过-qt配置;如果想使用系统中的第三方库,可用通过-system配置。下表中列出一些第三方库及其配置选项。

Library Name Bundled in Qt Installed in System
zlib -qt-zlib -system-zlib
libjpeg -qt-libjpeg -system-libjpeg
libpng -qt-libpng -system-libpng
xcb -qt-xcb -system-xcb
xkbcommon -qt-xkbcommon -system-xkbcommon
freetype -qt-freetype -system-freetype
PCRE -qt-pcre -system-pcre
HarfBuzz-NG -qt-harfbuzz -system-harfbuzz
当然,也可以禁用这些第三方库,用-no替换-qt就行,如下所示。
./configure -no-zlib -qt-libjpeg -qt-libpng -system-xcb
四.编译选项
-platform选项指定了目标平台和编译时使用的编译器,Qt支持的平台和编译器都在qtbase/mkspecs目录中。比如,在Ubuntu Linux系统中,Qt能被多种编译器编译,比如clang和g++,如下所示。

./configure -platform linux-clang
./configure -platform linux-g++
./configure -platform linux-g++-32
对于Windows系统,可以用MinGW或者Visual Studio工具链,如下所示。
configure.bat -platform win32-g++
configure.bat -platform win32-msvc2010
五.交叉编译选项
通用的选项如下所示。

-xplatform:指定目标平台,可用的xplatform与platform类似,也在qtbase/mkspecs目录中。

-device:指定特殊的设备或芯片,configure兼容的device在qtbase/mkspecs/devices目录中。

-device-option:设置额外的qmake参数,比如,-device-option CROSS_COMPILE=提供了特定设备交叉编译所需的环境变量。
六.Windows中使用OpenGL选项

在Windows中,Qt可以配置使用系统的OpenGL或者自带的ANGLE。默认情况下,Qt会配置使用ANGLE,ANGLE依赖于DirectX SDK。ANGLE使得依赖于OpenGL的Qt应用程序可以在没有安装OpenGL的机器上运行。

-opengl选项可以配置Qt使用目标机器上的OpenGL,如下所示。

configure.bat -opengl desktop
desktop选项告知Qt使用Windows上的OpenGL,当然前提是要求Windows上的OpenGL与Qt兼容。

-opengl选项支持两个版本的OpenGL ES,一个是es2,一个是es1,如下所示。

configure.bat -opengl es2
七.configure -h
configure -h与configure -help功能相同,显示所有配置选项。以下是Windows上Qt5.7.0的配置选项。

Installation options:
These are optional, but you may specify install directories.
-prefix

…… The deployment directory, as seen on the target device.(default %CD%)
-extprefix … The installation directory, as seen on the host machine.(default SYSROOT/PREFIX)
-hostprefix [dir] .. The installation directory for build tools running onthe host machine. If [dir] is not given,
the current builddirectory will be used. (default EXTPREFIX)
You may use these to change the layout of the install. Note that all directories except -sysconfdir should be located under -prefix/-hostprefix:
-bindir …… User executables will be installed to .(default PREFIX/bin)
-libdir …… Libraries will be installed to .(default PREFIX/lib)
-headerdir … Headers will be installed to . (default PREFIX/include)
-archdatadir . Architecture-dependent data used by Qt will be installed to .(default PREFIX)
-libexecdir .. Program executables will be installed to .(default ARCHDATADIR/bin)
-plugindir … Plugins will be installed to .(default ARCHDATADIR/plugins)
-importdir … Imports for QML1 will be installed to .(default ARCHDATADIR/imports)
-qmldir …… Imports for QML2 will be installed to .(default ARCHDATADIR/qml)
-datadir ….. Data used by Qt programs will be installed to .(default PREFIX)
-docdir …… Documentation will be installed to .(default DATADIR/doc)
-translationdir Translations of Qt programs will be installed to .(default DATADIR/translations)
-examplesdir . Examples will be installed to .(default PREFIX/examples)
-testsdir …. Tests will be installed to .(default PREFIX/tests)
-hostbindir .. Host executables will be installed to .(default HOSTPREFIX/bin)
-hostlibdir .. Host libraries will be installed to .(default HOSTPREFIX/lib)
-hostdatadir . Data used by qmake will be installed to .(default HOSTPREFIX)

Configure options:
The defaults (*) are usually acceptable. A plus (+) denotes a default value that needs to be evaluated. If the evaluation succeeds, the feature is included. Here is a short explanation of each option:
-release ……….. Compile and link Qt with debugging turned off.
* -debug …………. Compile and link Qt with debugging turned on.

  • -debug-and-release . Compile and link two Qt libraries, with and without debugging turned on.
    -force-debug-info .. Create symbol files for release builds.
    -separate-debug-info Strip debug information into a separate file.
    -developer-build … Compile and link Qt with Qt developer options(including auto-tests exporting)
    -optimized-tools … Build optimized host tools even in debug build.
    * -no-optimized-tools Do not build optimized host tools even in debug build.
    -opensource …….. Compile and link the Open-Source Edition of Qt.
    -commercial …….. Compile and link the Commercial Edition of Qt.
    -c++std .. Compile Qt with C++ standard edition (c++11, c++14, c++1z)Default: highest supported.
    1. This option is notsupported for MSVC.
    -use-gold-linker … Link using the GNU gold linker (gcc only).
    * -no-use-gold-linker Do not link using the GNU gold linker.
    -enable-new-dtags .. Use new DTAGS for RPATH (Linux only).
    * -disable-new-dtags . Do not use new DTAGS for RPATH.
    * -shared ………… Create and use shared Qt libraries.
    -static ………… Create and use static Qt libraries.
    * -static-runtime …. Statically link the C/C++ runtime library.
    -ltcg ………….. Use Link Time Code Generation. (Release builds only)
    * -no-ltcg ……….. Do not use Link Time Code Generation.
    -make ……. Add part to the list of parts to be built at make time,list containslibs,tools,examples
    -nomake ….. Exclude part from the list of parts to be built.
    -skip ….. Exclude an entire module from the build.
    -no-compile-examples Install only the sources of examples.
    -no-widgets …….. Disable Qt Widgets module.
    -no-gui ………… Disable Qt GUI module.
    -no-accessibility .. Disable accessibility support.Disabling accessibility is not recommended, as it willbreak
    1. QStyle and may break other internal parts of Qt.With this switch you create a source
    2. incompatibleversion of Qt,which is unsupported.
    * -accessibility ….. Enable accessibility support.
    -no-sql- … Disable SQL entirely, by default none are turned on.
    -qt-sql- … Enable a SQL in the Qt Library.
    -plugin-sql- Enable SQL as a plugin to be linked to at run time.Available values for :
    1. mysql
    2. psql
    3. oci
    4. odbc
    5. tds
    6. db2
  • sqlite
    sqlite2
    ibase
    (drivers marked with a ‘+’ have been detected asavailable on this system)
    -system-sqlite ….. Use sqlite from the operating system.
    -no-opengl ……… Do not support OpenGL.
    -opengl …… Enable OpenGL support with specified API version.Available values for :
    desktop - Enable support for Desktop OpenGL
    dynamic - Enable support for dynamically loadedOpenGL (either desktop or ES)
    * es2 - Enable support for OpenGL ES 2.0
    * -no-openvg ……… Disables OpenVG functionality.
    -openvg ………… Enables OpenVG functionality.
    -force-asserts ….. Activate asserts in release mode.
    -platform … The operating system and compiler you are building on.(default %QMAKESPEC%)
    -xplatform .. The operating system and compiler you are cross compiling to.See the README file for a
    list of supported operatingsystems and compilers.
    -target ………… Set target OS version. Currently the only valid value is ‘xp’ for targeting Windows XP.MSVC >=2012
    targets Windows Vista by default.
    -sysroot ….. Sets as the target compiler’s and qmake’s sysroot and also sets pkg-config paths.
    -no-gcc-sysroot …. When using -sysroot, it disables the passing of —sysroot to the compiler.
    -qconfig … Use src/corelib/global/qconfig-.h rather than the default ‘full’.
    * -no-nis ………… Do not compile NIS support.
    -nis …………… Compile NIS support.
    -no-iconv ………. Do not enable support for iconv(3).
  • -iconv …………. Enable support for iconv(3).
  • -sun-iconv ……… Enable support for iconv(3) using sun-iconv.
  • -gnu-iconv ……… Enable support for iconv(3) using gnu-libiconv.
    -no-evdev ………. Do not enable support for evdev.
  • -evdev …………. Enable support for evdev.
    -no-mtdev ………. Do not enable support for mtdev.
  • -mtdev …………. Enable support for mtdev.
  • -inotify ……….. Explicitly enable Qt inotify(7) support.
    -no-inotify …….. Explicitly disable Qt inotify(7) support.
  • -eventfd ……….. Enable eventfd(7) support in the UNIX event loop.
    -no-eventfd …….. Disable eventfd(7) support in the UNIX event loop.
    * -largefile ……… Enables Qt to access files larger than 4 GB.
    -posix-ipc ……… Enable POSIX IPC.
    -glib ………….. Compile Glib support.
    -sysconfdir .. Settings used by Qt programs will be looked for in .
    -system-proxies …. Use system network proxies by default.
    * -no-system-proxies . Do not use system network proxies by default.
  • -warnings-are-errors Make warnings be treated as errors.
    -no-warnings-are-errors Make warnings be treated normally.
    -qtnamespace Wraps all Qt library code in ‘namespace name {…}‘.
    -qtlibinfix Renames all Qt* libs to Qt*.
    -D …….. Add an explicit define to the preprocessor.
    -I … Add an explicit include path.
    -L … Add an explicit library path.
    -l … Add an explicit library name, residing in a librarypath.
    -no-pch ………… Do not use precompiled header support.
    * -pch …………… Use precopmiled header support.
    -help, -h, -? …… Display this information.

Third Party Libraries:
-qt-zlib ……….. Use the zlib bundled with Qt.

  • -system-zlib ……. Use zlib from the operating system.See http://www.gzip.org/zlib
    -qt-pcre ……….. Use the PCRE library bundled with Qt.
  • -system-pcre ……. Use the PCRE library from the operating system.See http://pcre.org/
    -icu …………… Use the ICU library.
    * -no-icu ………… Do not use the ICU library.See http://site.icu-project.org/
    -no-gif ………… Do not compile GIF reading support.
    -no-libpng ……… Do not compile PNG support.
    -qt-libpng ……… Use the libpng bundled with Qt.
  • -system-libpng ….. Use libpng from the operating system.See http://www.libpng.org/pub/png
    -no-libjpeg …….. Do not compile JPEG support.
    -qt-libjpeg …….. Use the libjpeg bundled with Qt.
  • -system-libjpeg …. Use libjpeg from the operating system.See http://www.ijg.org
    -no-doubleconversion Use sscanf_l and snprintf_l for (imprecise) double con version.
    -qt-doubleconversion Use the libdouble-conversion bundled with Qt.
    -system-doubleconversion Use the libdouble-conversion provided by the system.
    -no-freetype ……. Do not compile in Freetype2 support.
    * -qt-freetype ……. Use the libfreetype bundled with Qt.
    -system-freetype … Use the libfreetype provided by the system.
    -fontconfig …….. Build with FontConfig support.
    * -no-fontconfig ….. Do not build with FontConfig support.
    -no-harfbuzz ……. Do not compile in HarfBuzz-NG support.
    * -qt-harfbuzz ……. Use HarfBuzz-NG bundled with Qt to do text shaping.It can still be disabled by settingthe
    1. QT\_HARFBUZZ environment variable to "old".
    -system-harfbuzz … Use HarfBuzz-NG from the operating system to do text shaping. It can still be disabled by
    1. setting the QT\_HARFBUZZ environment variable to"old".See http://www.harfbuzz.org
  • -angle …………. Use the ANGLE implementation of OpenGL ES 2.0.
    -no-angle ………. Do not use ANGLE.See http://code.google.com/p/angleproject/

Qt for Windows only:
-no-incredibuild-xge Do not add IncrediBuild XGE distribution commands to custom build steps.

  • -incredibuild-xge .. Add IncrediBuild XGE distribution commands to custom build steps. This will distribute MOC
    1. and UIC steps,and other custom buildsteps which are added to theINCREDIBUILD\_XGE
    2. variable.(The IncrediBuild distribution commands are only addedto Visual Studio projects)
    * -no-plugin-manifests Do not embed manifests in plugins.
    -plugin-manifests .. Embed manifests in plugins.
    -no-qmake ………. Do not compile qmake.
    * -qmake …………. Compile qmake.
    -qreal [double|float] typedef qreal to the specified type. The default is double.Note that changing this flag affects binary compatibility.
    -no-rtti ……….. Do not compile runtime type information.
    * -rtti ………….. Compile runtime type information.
    -no-strip ………. Do not strip libraries and executables of debug info when installing.
    * -strip …………. Strip libraries and executables of debug info when installing.
    -no-sse2 ……….. Do not compile with use of SSE2 instructions.
  • -sse2 ………….. Compile with use of SSE2 instructions.
    -no-sse3 ……….. Do not compile with use of SSE3 instructions.
  • -sse3 ………….. Compile with use of SSE3 instructions.
    -no-ssse3 ………. Do not compile with use of SSSE3 instructions.
  • -ssse3 …………. Compile with use of SSSE3 instructions.
    -no-sse4.1 ……… Do not compile with use of SSE4.1 instructions.
  • -sse4.1 ………… Compile with use of SSE4.1 instructions.
    -no-sse4.2 ……… Do not compile with use of SSE4.2 instructions.
  • -sse4.2 ………… Compile with use of SSE4.2 instructions.
    -no-avx ………… Do not compile with use of AVX instructions.
  • -avx …………… Compile with use of AVX instructions.
    -no-avx2 ……….. Do not compile with use of AVX2 instructions.
  • -avx2 ………….. Compile with use of AVX2 instructions.
    -no-avx512 ……… Do not compile with use of AVX512 instructions.
  • -avx512 ………… Compile with use of AVX512 instructions.
    -no-ssl ………… Do not compile support for SSL.
  • -ssl …………… Enable run-time SSL support.
    -no-openssl …….. Do not compile support for OpenSSL.
  • -openssl ……….. Enable run-time OpenSSL support.
    -openssl-linked …. Enable linked OpenSSL support.
    -no-libproxy ……. Do not compile in libproxy support.
  • -libproxy ………. Compile in libproxy support (for cross compilation targets).
    -no-dbus ……….. Do not compile in D-Bus support.
    -dbus-linked ……. Compile in D-Bus support and link to libdbus-1.
    -dbus-runtime …… Compile in D-Bus support and load libdbus-1 dynamically.
    -no-audio-backend .. Do not compile in the platform audio backend into Qt Multimedia.
  • -audio-backend ….. Compile in the platform audio backend into Qt Qt Multimedia.
    * -no-wmf-backend …. Do not compile in the windows media foundation backend into Qt Multimedia.
    -wmf-backend ……. Compile in the windows media foundation backend into Qt Multimedia.
    -no-qml-debug …… Do not build the in-process QML debugging support.
    * -qml-debug ……… Build the in-process QML debugging support.
    -no-directwrite …. Do not build support for DirectWrite font rendering.
  • -directwrite ……. Build support for DirectWrite font rendering.
    * -no-direct2d ……. Do not build the Direct2D platform plugin.
    -direct2d ………. Build the Direct2D platform plugin (experimental,requires Direct2D availability on target systems,
    1. e.g. Windows 7 with Platform Update, Windows 8, etc.)
    -no-style-

发表评论

表情:
评论列表 (有 0 条评论,839人围观)

还没有评论,来说两句吧...

相关阅读

    相关 caffe window7 vs2013 编译

    笔者一开始一直想用vs2015来进行编译,后来搞了半天,还不如直接下一个vs2013(5G左右,但是速度很快,一个小时就差不多了)。 参考链接:[https://www.