1. 程式人生 > >VS編譯Qt原始碼

VS編譯Qt原始碼

    Qt常用的編譯方式有兩種,一種是使用mingw編譯器,另外一種是使用vs編譯器進行編譯,本文主要介紹使用vs編譯器進行編譯。

1、編譯選項

    以下編譯選項為常用編譯選項,可新增在編譯命令中,都是可選:

    1)-prefix <dir> :指定安裝目錄預設在;
    2)-hostprefix [dir] :指定可擴充套件的工具庫安裝路徑,預設當前目錄;
    3) -prefix-install :指定QT的本地安裝;
    4)-bindir <dir> :指定可執行檔案路徑 <dir>(預設 PREFIX/bin下);
    5)-libdir <dir> 

 指定庫檔案路徑 <dir>(預設 PREFIX/lib);
    6)-docdir <dir> : 指定文件路徑 <dir>(預設 PREFIX/doc);
    7)-headerdir <dir> : 指定標頭檔案路徑 <dir>(預設 PREFIX/include);
    8)-plugindir <dir> : 指定外掛路徑 <dir> (預設 PREFIX/plugins);
    9)-datadir <dir> : 指定QT要使用到的一些資料檔案所在路徑 <dir> (預設 PREFIX);
    10)-translationdir <dir> :指定
QT程式的翻譯檔案路徑 <dir>(預設 PREFIX/translations);
    11)-sysconfdir <dir> :指定QT的設定檔案路徑 <dir>(預設 PREFIX/etc/settings);
    12)-examplesdir <dir> : 指定例項檔案, <dir>(預設 PREFIX/examples)
    13)-demosdir <dir> : 指定demos的安裝路徑 <dir> (預設 PREFIX/demos);
    14)-buildkey <key> : 通過指定的
key生成QT庫和外掛;
    15)-release :此選項在編譯過程QT會對程式進行優化,在釋出軟體的時候應該用此選項,是預設選項;
    16)-debug :加上此選項編譯程式QT不會做出優化,往往在開發過程使用此選項;
    17)-debug-and-release : 編譯兩個版本
    18)-developer-build  編譯Qt的開發商和連線選項(包括自動測試出口的Qt);
    19)-opensource 以開源版本釋出程式;
    20)-commercial 以商業版本釋出程式;
    21)-shared : 建立和使用共享Qt庫;
    22)-static : 建立和使用靜態的Qt庫;
    23)-no-fast : 使用通常的Makefile來編譯,是預設選項;
    24)-fast : 快速編譯,除了封裝必要的庫,部分步驟省略或者用快速的方法處理
    25)-no-largefile : 禁用大檔案支援

    26)-largefile :支援訪問大於4GB的檔案;
    27)-no-exceptions : 禁用編譯器本身對異常的處理
    28)-exceptions : 啟用編譯器本身對異常的處理

    29)-no-accessibility 、-accessibility :禁用/啟用無障礙支援;
    30)-no-stl、-stl :禁用/啟用STL支援;
    31)-no-sql-<driver> : 禁用SQL;
    32)-qt-sql-<driver> : 根據需求啟用SQL外掛(預設全部關閉);
    33)-plugin-sql-<driver> :禁用/啟用/啟用外掛 對SQL的支援;
    34)-system-sqlite : 啟用支援sqlite也可用-qt-sqlite;
    35)-no-qt3support 、-qt3support :禁用/啟用qt3支援模組;
    36)-no-xmlpatterns 、-xmlpatterns : 禁用/啟用xmlpatterns模組;
    37)-no-phonon 、-phonon : 禁用/啟用Phonon模組(可以理解為聲音控制模組);
    38)-no-phonon-backend、-phonon-backend:禁用/啟用phonon-backend模組;
    39)-no-svg、-svg : 禁用/啟用svg模組;
    40)-no-webkit、-webkit : 禁用/啟用webkit模組(訪問網路模組);
    41)-no-scripttools 、-scripttools : 禁用/啟用scripttools模組;
    42)-platform target : x86平臺指定模組 (qws/linux-x86-g++);
    43)-qtnamespace <name> 指定所有庫程式碼路徑;
    44)-qtlibinfix <infix> :重新命名所有.so庫檔案到指定路徑;
    45)-qt-zlib :zlib依賴包;

    46)-no-gif 、-qt-gif :gif圖片支援包;
    47)-no-libtiff 、-qt-libtiff :tiff支援外掛;
    48)-no-libpng 、-qt-libpng :png圖片支援外掛;
    49)-no-libmng 、-qt-libmng : mng支援外掛;
    50)-no-libjpeg 、-qt-libjpeg :jpeg圖片支援外掛;

    51)-no-openssl、-openssl :openssl支援外掛;

    52)-make <part>、-nomake <part> :選擇是否編譯某些無關緊要的子模組;
    53)-continue :忽略錯誤的編譯;
    54)-verbose, -v :顯示每個步驟的詳細資訊;
    55)-silent :安靜的編譯省略資訊回顯;
    56)-no-optimized-qmake、-optimized-qmake :禁用/開啟qmake的優化作用;
    57) -no-nis 、-nis :禁用/開啟NIS的支援;
    58)-no-cups 、-cups :禁用/開啟對CUPS的支援;

    59)-no-iconv 、-iconv :禁用/開啟對iconv的支援;
    60)-no-pch 、-pch :禁用/開啟是否使用前處理器標頭檔案;
    61)-no-dbus、-dbus :禁用/開啟對QTdbus模組的編譯;
    62)-reduce-relocations :減少因為連結優化而導致的而外的庫檔案重置
    63)-no-separate-debug-info :不將除錯資訊放在一個檔案內;
    64)-separate-debug-info : 將除錯資訊放在一個檔案內
    65)-no-opengl 、-opengl :禁用/開啟對opengl的支援;
    66)-no-glib 、-glib : 禁用/啟用對glib的支援。

2、編譯步驟

    進行解壓,注意解壓路徑不要含有空格或中文,我把它解壓到了D:\Qt5.1src裡,準備把編譯好的放在D:\Qt5.1裡;

    2)開啟VS編譯控制檯,進入解壓的地方,比如我的: cd D:\Qt5.1src;

    3)鍵入命令configure -prefix D:\Qt5.1 -debug-and-release -static -opensource -no-qt3support -no-dbus -no-phonon -no-webkit -qt-gif -qt-zlib -qt-libpng -qt-libmng -qt-libtiff -qt-libjpeg;

    注:編譯選項參照上面。

    4)configure可能要花幾分鐘時間,成功後再輸入nmake開始編譯,編譯會花去大概1小時左右;

    5)輸入nmake install,進行編譯安裝。

3、簡單測試

    利用pro檔案進行專案組織,連結相應檔案和Qt的庫,手動編寫專案原始碼,使用QMAKE命令轉成vs的解決方案,進行測試,簡單程式碼如下:

    pro檔案:

QT       += core
 
QT       -= gui
 
TARGET = Test
CONFIG   += console
CONFIG   -= app_bundle
 
TEMPLATE = app
 
 
SOURCES += main.cpp

    main.cpp檔案

#include <QCoreApplication>
 
int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);
 
    return a.exec();
}

    編譯的為控制檯應用程式,如果可以正常執行即為編譯成功。