首頁>Program>source

我想在VS2012下製作一个完全靜態的Qt 4.8 / 5.2版本-包括靜態執行時庫,並以windows XP系統為目標. Qt不支援開箱即用,因為即使Qt的靜態版本也使用動態鏈接的MSVC執行時。

這是一个規範問题,提供成功構建满足這些要求的Qt所需的知識。

最新回復
  • 6月前
    1 #

    Qt 5.2

    假設環境已针對XP定位和相關的XP定位 qt5xp.patch 和錯誤修複 qt5fixes.patch 可用-从我的其他答案中,我们都必须執行以下操作:

    建立一个單独的 win32-msvc2012-staticwin32-msvc2012-static-xp 通過从 qtbase/mkspecs/win32-msvc2012複製qmake規格 和 qtbase/mkspecs/win32-msvc2012-xp

    修改qmake規格。

    教匯有關新qmake規格的configure和qmake makefile。

    configure.exe的強製引匯 通過建立一个空的 .gitignoreqtbase中的檔案

    如果要使用 -prefix配置Qt 為了使安裝目錄和構建目錄分開,您必须 apply the patch for QTBUG-32519 -至少要修複该錯誤為止。

    以下批處理檔案完成了全部工作.目前,對於靜態Qt構建,已禁用webkit構建。

    :: Assume that we're in an equivalent of C:\Qt prefix
    @set PREFIX=%~dp0
    :: Qt sources
    @set QT=%PREFIX%..\5.2.1-src
    :: Patch file(s)
    @set SRC=%PREFIX%
    @set SPEC=win32-msvc2012
    @if not exist "%QT%\qt.pro" ( echo Qt source folder expected in %QT%>&2 & exit /b 1 )
    ::
    @patch --forward --directory=%QT% -p0 --global-reject-file=%SRC%\qt5fixes.rej --input=%SRC%\qt5fixes.patch
    ::
    @echo > %QT%\qtbase\.gitignore
    @mkdir %QT%\qtbase\mkspecs\%SPEC%-xp
    @copy %QT%\qtbase\mkspecs\%SPEC%\qplatformdefs.h %QT%\qtbase\mkspecs\%SPEC%-xp
    @copy %QT%\qtbase\mkspecs\%SPEC%\qmake.conf %QT%\qtbase\mkspecs\%SPEC%-xp
    @patch --forward --directory=%QT% -p0 --global-reject-file=%SRC%\qt5xp.rej --input=%SRC%\qt5xp.patch
    ::
    @mkdir %QT%\qtbase\mkspecs\%SPEC%-static
    @copy %QT%\qtbase\mkspecs\%SPEC%\qplatformdefs.h %QT%\qtbase\mkspecs\%SPEC%-static
    @copy %QT%\qtbase\mkspecs\%SPEC%\qmake.conf %QT%\qtbase\mkspecs\%SPEC%-static
    @mkdir %QT%\qtbase\mkspecs\%SPEC%-static-xp
    @copy %QT%\qtbase\mkspecs\%SPEC%-xp\qplatformdefs.h %QT%\qtbase\mkspecs\%SPEC%-static-xp
    @copy %QT%\qtbase\mkspecs\%SPEC%-xp\qmake.conf %QT%\qtbase\mkspecs\%SPEC%-static-xp
    @patch --forward --directory=%QT% -p0 --global-reject-file=%SRC%\qt5static.rej --input=%SRC%\qt5static.patch
    

    致威兹維兹 對Qt源所做的更改,請執行以下命令,並按照上述步骤設置變數:

    undo
    

    然後通過執行

    进行構建
    @patch --reverse --directory=%QT% -p0 --global-reject-file=%SRC%\qt5static-unfix.rej --input=%SRC%\qt5static.patch
    @del %QT%\qtbase\mkspecs\%SPEC%-static\qplatformdefs.h
    @del %QT%\qtbase\mkspecs\%SPEC%-static\qmake.conf
    @rmdir %QT%\qtbase\mkspecs\%SPEC%-static
    @del %QT%\qtbase\mkspecs\%SPEC%-static-xp\qplatformdefs.h
    @del %QT%\qtbase\mkspecs\%SPEC%-static-xp\qmake.conf
    @rmdir %QT%\qtbase\mkspecs\%SPEC%-static-xp
    ::
    @patch --reverse --directory=%QT% -p0 --global-reject-file=%SRC%\qt5xp-unfix.rej --input=%SRC%\qt5xp.patch
    @del %QT%\qtbase\mkspecs\%SPEC%-xp\qplatformdefs.h
    @del %QT%\qtbase\mkspecs\%SPEC%-xp\qmake.conf
    @rmdir %QT%\qtbase\mkspecs\%SPEC%-xp
    @del %QT%\qtbase\.gitignore
    ::
    @patch --reverse --directory=%QT% -p0 --global-reject-file=%SRC%\qt5fixes-unfix.rej --input=%SRC%\qt5fixes.patch
    
    configure -static -platform win32-msvc2012-static-xp (or win32-msvc2012-static)
    jom (or nmake)
    jom install (if doing the build separate from the installation directory)
    

  • 6月前
    2 #

    Qt 4.8

    假設環境已针對XP定位和相關的XP定位 # qt5static.patch # Static MSVC Runtime Support for Qt 5.2 # # Build qmake with XP targeting. --- qtbase/qmake/Makefile.win32 2014-02-20 12:28:23.316380600 -0500 +++ qtbase/qmake/Makefile.win32 2014-02-20 12:29:07.396008900 -0500 @@ -42,7 +42,7 @@ -DQT_NO_TEXTCODEC -DQT_NO_UNICODETABLES -DQT_NO_COMPONENT -DQT_NO_COMPRESS \ -DQT_NO_THREAD -DQT_NO_QOBJECT -DQT_NO_GEOM_VARIANT -DQT_NO_DATASTREAM \ -DUNICODE -DQT_CRYPTOGRAPHICHASH_ONLY_SHA1 -DQT_JSON_READONLY -!if "$(QMAKESPEC)" == "win32-msvc2012-xp" +!if "$(QMAKESPEC)" == "win32-msvc2012-xp" || "$(QMAKESPEC)" == "win32-msvc2012-static-xp" CFLAGS_BARE = $(CFLAGS_BARE) -D_USING_V110_SDK71_ !endif CFLAGS = -Yuqmake_pch.h -FIqmake_pch.h -Fpqmake_pch.pch $(CFLAGS_BARE) $(CFLAGS) $(EXTRA_CPPFLAGS) # Add support for static qmake specs. --- qtbase/qmake/Makefile.win32 2014-02-01 22:37:30.000000000 -0500 +++ qtbase/qmake/Makefile.win32 2014-02-17 16:21:09.329949100 -0500 @@ -1,4 +1,4 @@ -!IF "$(QMAKESPEC)" == "win32-msvc" || "$(QMAKESPEC)" == "win32-msvc.net" || "$(QMAKESPEC)" == "win32-msvc2002" || "$(QMAKESPEC)" == "win32-msvc2003" || "$(QMAKESPEC)" == "win32-msvc2005" || "$(QMAKESPEC)" == "win32-msvc2008" || "$(QMAKESPEC)" == "win32-msvc2010" || "$(QMAKESPEC)" == "win32-msvc2012" || "$(QMAKESPEC)" == "win32-msvc2012-xp" || "$(QMAKESPEC)" == "win32-msvc2013" || "$(QMAKESPEC)" == "win32-icc" +!IF "$(QMAKESPEC)" == "win32-msvc" || "$(QMAKESPEC)" == "win32-msvc.net" || "$(QMAKESPEC)" == "win32-msvc2002" || "$(QMAKESPEC)" == "win32-msvc2003" || "$(QMAKESPEC)" == "win32-msvc2005" || "$(QMAKESPEC)" == "win32-msvc2008" || "$(QMAKESPEC)" == "win32-msvc2010" || "$(QMAKESPEC)" == "win32-msvc2012" || "$(QMAKESPEC)" == "win32-msvc2012-static" || "$(QMAKESPEC)" == "win32-msvc2012-static-xp" || "$(QMAKESPEC)" == "win32-msvc2012-xp" || "$(QMAKESPEC)" == "win32-msvc2013" || "$(QMAKESPEC)" == "win32-icc" !if "$(SOURCE_PATH)" == "" SOURCE_PATH = .. # Set static runtime. --- qtbase/mkspecs/win32-msvc2012-static/qmake.conf 2014-02-17 23:01:29.965440300 -0500 +++ qtbase/mkspecs/win32-msvc2012-static/qmake.conf 2014-02-17 23:05:51.630568400 -0500 @@ -24,9 +24,9 @@ QMAKE_CFLAGS = -nologo -Zm200 -Zc:wchar_t QMAKE_CFLAGS_WARN_ON = -W3 QMAKE_CFLAGS_WARN_OFF = -W0 -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 -d2Zi+ +QMAKE_CFLAGS_DEBUG = -Zi -MTd -d2Zi+ QMAKE_CFLAGS_YACC = QMAKE_CFLAGS_LTCG = -GL QMAKE_CFLAGS_MP = -MP # Set static runtime. --- qtbase/mkspecs/win32-msvc2012-static-xp/qmake.conf 2014-02-17 23:01:29.965440300 -0500 +++ qtbase/mkspecs/win32-msvc2012-static-xp/qmake.conf 2014-02-17 23:05:51.630568400 -0500 @@ -24,9 +24,9 @@ QMAKE_CFLAGS = -nologo -Zm200 -Zc:wchar_t QMAKE_CFLAGS_WARN_ON = -W3 QMAKE_CFLAGS_WARN_OFF = -W0 -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 -d2Zi+ +QMAKE_CFLAGS_DEBUG = -Zi -MTd -d2Zi+ QMAKE_CFLAGS_YACC = QMAKE_CFLAGS_LTCG = -GL QMAKE_CFLAGS_MP = -MP 和錯誤修複 qt4xp.patch 可用-从我的其他答案中,以下指令碼可以完成工作:

    qt4fixes.patch
    

    致威兹維兹 對Qt源所做的更改,請執行以下命令,並按照上述步骤設置變數:

    :: Assume that we're in an equivalent of C:\Qt prefix
    @set PREFIX=%~dp0
    :: Qt sources
    @set QT=%PREFIX%..\4.8.5-src
    :: Patch file(s)
    @set SRC=%PREFIX%
    @set SPEC=win32-msvc2012
    @if not exist "%QT%\projects.pro" ( echo Qt source folder expected in %QT%>&2 & exit /b 1 )
    ::
    @patch --forward --directory=%QT% -p0 --global-reject-file=%SRC%\qt4fixes.rej --input=%SRC%\qt4fixes.patch
    ::
    @mkdir %QT%\mkspecs\%SPEC%-xp
    @copy %QT%\mkspecs\%SPEC%\qplatformdefs.h %QT%\mkspecs\%SPEC%-xp
    @copy %QT%\mkspecs\%SPEC%\qmake.conf %QT%\mkspecs\%SPEC%-xp
    @patch --forward --directory=%QT% -p0 --global-reject-file=%SRC%\qt4xp.rej --input=%SRC%\qt4xp.patch
    ::
    @mkdir %QT%\mkspecs\%SPEC%-static
    @copy %QT%\mkspecs\%SPEC%\qplatformdefs.h %QT%\mkspecs\%SPEC%-static
    @copy %QT%\mkspecs\%SPEC%\qmake.conf %QT%\mkspecs\%SPEC%-static
    @mkdir %QT%\mkspecs\%SPEC%-static-xp
    @copy %QT%\mkspecs\%SPEC%-xp\qplatformdefs.h %QT%\mkspecs\%SPEC%-static-xp
    @copy %QT%\mkspecs\%SPEC%-xp\qmake.conf %QT%\mkspecs\%SPEC%-static-xp
    @patch --forward --directory=%QT% -p0 --global-reject-file=%SRC%\qt4static.rej --input=%SRC%\qt4static.patch
    

    然後通過執行

    进行構建
    undo
    
    @patch --reverse --directory=%QT% -p0 --global-reject-file=%SRC%\qt4static-unfix.rej --input=%SRC%\qt4static.patch
    @del %QT%\mkspecs\%SPEC%-static\qplatformdefs.h
    @del %QT%\mkspecs\%SPEC%-static\qmake.conf
    @rmdir %QT%\mkspecs\%SPEC%-static
    @del %QT%\mkspecs\%SPEC%-static-xp\qplatformdefs.h
    @del %QT%\mkspecs\%SPEC%-static-xp\qmake.conf
    @rmdir %QT%\mkspecs\%SPEC%-static-xp
    ::
    @patch --reverse --directory=%QT% -p0 --global-reject-file=%SRC%\qt4xp-unfix.rej --input=%SRC%\qt4xp.patch
    @del %QT%\mkspecs\%SPEC%-xp\qplatformdefs.h
    @del %QT%\mkspecs\%SPEC%-xp\qmake.conf
    @rmdir %QT%\mkspecs\%SPEC%-xp
    ::
    @patch --reverse --directory=%QT% -p0 --global-reject-file=%SRC%\qt4fixes-unfix.rej --input=%SRC%\qt4fixes.patch
    
    configure -static -platform win32-msvc2012-static-xp (or win32-msvc2012-static) jom (or nmake)

  • sqlite:建立sqlite3表後將其添加到DELETE CASCADE行為
  • 有没有一種方法可以从utf16陣列快速建立字元串?