我想在VS2012下製作一个完全靜態的Qt 4.8 / 5.2版本-包括靜態執行時庫,並以windows XP系統為目標. Qt不支援開箱即用,因為即使Qt的靜態版本也使用動態鏈接的MSVC執行時。
這是一个規範問题,提供成功構建满足這些要求的Qt所需的知識。
- 6月前1 #
- 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)
相似問題
- qt:QCompleter自定義完成規則qtqt4qt4.6qcomboboxqcompleter2021-01-12 01:28
- c++:Qt GUI應用程式中的控製台輸出?c++windowsqtqt42020-12-29 07:54
- gdb:無法在windows 10上執行Qt Creator除錯qtgdbqt4qtcreator2020-12-18 21:23
Qt 5.2
假設環境已针對XP定位和相關的XP定位
qt5xp.patch
和錯誤修複qt5fixes.patch
可用-从我的其他答案中,我们都必须執行以下操作:建立一个單独的
win32-msvc2012-static
和win32-msvc2012-static-xp
通過从qtbase/mkspecs/win32-msvc2012
複製qmake規格 和qtbase/mkspecs/win32-msvc2012-xp
修改qmake規格。
教匯有關新qmake規格的configure和qmake makefile。
configure.exe
的強製引匯 通過建立一个空的.gitignore
在qtbase
中的檔案如果要使用
-prefix
配置Qt 為了使安裝目錄和構建目錄分開,您必须 apply the patch for QTBUG-32519 -至少要修複该錯誤為止。以下批處理檔案完成了全部工作.目前,對於靜態Qt構建,已禁用webkit構建。
致威兹維兹 對Qt源所做的更改,請執行以下命令,並按照上述步骤設置變數:
然後通過執行
进行構建