Qt5的依賴太多, 並且很dll很是大. 折騰了很久, 摸索了一些精簡的方法. html
webkit是個很是蛋疼的東西, 依賴超多, 又很龐大. 因此需不須要webkit是徹底不一樣的. web
如何編譯Qt5能夠參考本人以前一篇文章 http://www.cnblogs.com/lingdhox/p/3457419.htmlapi
一. app
1. 在configure時去掉不須要的模塊, 好比openssl, icu等. ide
configure -opensource -developer-build -mp -platform win32-msvc2010 -nomake examples -nomake tests -no-icu -no-openssl -no-iconv -no-qml-debug -no-plugin-manifests
更多參數能夠configure -help 查看工具
-no-plugin-manifests 去掉插件dll的manifests文件性能
須要注意: 若是要使用webkit, 那麼icu是必須的.ui
2. 在configure時, 指定qconfig文件 spa
該方法在嵌入式中使用較多, Qt支持feature裁剪. 插件
在qtbase\src\corelib\global\下有一些qconfig-xxx.h的文件, 就是指定了不一樣的feature.
Qt tools下有個工程qttools\src\qtconfig , 編譯這個項目, 運行後, 是一個圖形化的裁剪feature工具. 它打開qtbase\src\corelib\global\下的qfeatures.txt, 而後你能夠自由選擇須要的feature, 保存成qconfig-myconfig.h
而後在運行configure時. 添加 -qconfig myconfig
我試過這個方法, 但結果是有些地方引用頭文件出錯. 並且沒有用到feature不多, 就不深刻研究了.
3. 去掉webkit的quick qml printsupport sensors Qt5V8依賴, 並裁剪webkit自己的大小
打開qtwebkit\Tools\qmake\mkspecs\features下的configure.prf 、features.prf和features.pri
features.prf中註釋這四行(加#)
#haveQtModule(quick): WEBKIT_CONFIG += have_qtquick #else: CONFIGURE_WARNINGS += "QtQuick module not found, QML APIs will not be built" #haveQtModule(printsupport): WEBKIT_CONFIG += have_qtprintsupport
#haveQtModule(sensors): WEBKIT_CONFIG += orientation_events device_orientation
這樣編譯出來的webkit.dll不依賴quick qml printsupport sensors
features.prf中這幾行config
config_libxml2: WEBKIT_CONFIG += use_libxml2 config_libxslt: WEBKIT_CONFIG += xslt config_libzlib: WEBKIT_CONFIG += use_zlib config_libwebp: WEBKIT_CONFIG += use_webp
的定義在qtCompileTest中
qtbase\mkspecs\features\configure.prf下的解釋
# Try to build the test project in $$QMAKE_CONFIG_TESTS_DIR/$$1 # ($$_PRO_FILE_PWD_/config.tests/$$1 by default). # # If the test passes, config_$$1 will be added to CONFIG. # The result is automatically cached. Use of cached results # can be suppressed by passing CONFIG+=recheck to qmake. # # Returns: true iff the test passes defineTest(qtCompileTest) { positive = config_$$1 done = done_config_$$1
done_config_$$1會輸出到.qmake.cache
好比qtimageformats\qtimageformats.pro 中添加libwebp
requires(qtHaveModule(gui))
load(configure)
qtCompileTest(jasper)
qtCompileTest(libmng)
qtCompileTest(libtiff)
qtCompileTest(libwebp)
load(qt_parts)
configure.prf 中把
WEBKIT_CONFIG += \ build_webkit1 \ build_webkit2 \ build_tests \ $$WEBKIT_TOOLS_CONFIG
改爲
WEBKIT_CONFIG += \ build_webkit1 \ build_tests \ $$WEBKIT_TOOLS_CONFIG
不編譯webkit2 , webkit2依賴Qt5V8, 提高HTML5 , js, qml 的支持. 並提高性能.
需不須要就看狀況了
features.pri 中一堆宏, 用於控制特性. 須要本身檢查那些特性不須要.
注意: 這三個文件的修改要在編譯前.
qtwebkit\makefile是在.\makefile中編譯module-qtwebkit時動態生成的(不存在纔會生成)
因此若是修改三個文件後, 想從新編譯, 須要刪除webkit下新生成的全部makefile
makefile source\Makefile.api source\Makefile.api.Debug source\Makefile.api.Release source\Makefile.widgetsapi source\Makefile.widgetsapi.Debug source\Makefile.widgetsapi.Release source\Makefile.QtWebKit source\JavaScriptCore\Makefile.jsc source\JavaScriptCore\Makefile.jsc.Debug source\JavaScriptCore\Makefile.jsc.Release source\JavaScriptCore\Makefile.LLIntOffsetsExtractor source\JavaScriptCore\Makefile.LLIntOffsetsExtractor.Debug source\JavaScriptCore\Makefile.LLIntOffsetsExtractor.Release source\JavaScriptCore\Makefile.JavaScriptCore.DerivedSources source\JavaScriptCore\Makefile.JavaScriptCore Makefile.JavaScriptCore.Target Makefile.JavaScriptCore.Target.Debug Makefile.JavaScriptCore.Target.Release Source\WebCore\Makefile.WebCore.DerivedSources Source\WebCore\Makefile.WebCore.Target Source\WebCore\Makefile.WebCore.Target.Debug Source\WebCore\Makefile.WebCore.Target.Release Source\WebCore\Makefile.WebCore Source\WebKit\Makefile.WebKit1 Source\WebKit\Makefile.WebKit1.Debug Source\WebKit\Makefile.WebKit1.Release Source\WebKit2\Makefile.WebKit2.DerivedSources Source\WebKit2\Makefile.WebProcess Source\WebKit2\Makefile.WebProcess.Debug Source\WebKit2\Makefile.WebProcess.Release Source\WebKit2\Makefile.WebKit2.Target Source\WebKit2\Makefile.WebKit2.Target.Debug Source\WebKit2\Makefile.WebKit2.Target.Release Source\WebKit2\Makefile.WebKit2 source\wtf\Makefile.WTF source\wtf\Makefile.WTF.Debug source\wtf\Makefile.WTF.Release Source\ThirdParty\ANGLE\Makefile.ANGLE.Target Source\ThirdParty\ANGLE\Makefile.ANGLE.Target.Debug Source\ThirdParty\ANGLE\Makefile.ANGLE.Target.Release Source\ThirdParty\ANGLE\Makefile.ANGLE Source\ThirdParty\ANGLE\Makefile.ANGLE.DerivedSources Source\WebKit\qt\declarative\Makefile.declarative.public Source\WebKit\qt\declarative\Makefile.declarative.public.Debug Source\WebKit\qt\declarative\Makefile.declarative.public.Release Source\WebKit\qt\declarative\Makefile.declarative Source\WebKit\qt\declarative\experimental\Makefile.declarative.experimental Source\WebKit\qt\declarative\experimental\Makefile.declarative.experimental.Debug Source\WebKit\qt\declarative\experimental\Makefile.declarative.experimental.Release
須要刪除這些, 因此我以爲從壓縮包裏從新拷貝一份qtwebkit的源碼出來編譯, 更方便. 環境也更乾淨
運行 nmake module-qtwebkit 而後會生成一個.qmake.cache
打開能夠看到WEBKIT_CONFIG (即剛纔修改的選項)
4. 裁剪icu的大小, icudt*.dll, icuin*.dll, icuuc*.dll
http://userguide.icu-project.org/icufaq
1). 根據官方faq的方法, 定製本身須要的數據
http://apps.icu-project.org/datacustom/
先在get data library下選擇版本, 好比 ICU 51 Data
而後選擇本身的須要的語言版本. 這樣最後的icudt51l.dat 大概在幾M左右.
2). 下載對應版本的源碼包.
替換icu\source\data\in 下的icudt*l.dat
打開icu\source\allinone的VS工程
編譯. 最終生成的文件icu\ 下
5. 最終生成的dll:
Qt5WebKit.dll 10M
icudt51.dll 3M
icuin51.dll 1.3M
icuuc51.dll 1M