用 Visual C++ Express 編譯 Qt4/Win Open Source Edititon

Update 01/30/09: 目前最新版的 Qt4 已經直接支援不需要 patch 囉。滿久的事情 …

Qt4 Open Source Edition 本身在 Windows 下並不支援用 gcc 以外的編譯器編譯, 不過經由非官方的 patch, 可以支援 Visual Studio (express), 簡單講解一下步驟。
本說明參考:

http://wiki.qtcentre.org/index.php?title=Qt4_with_Visual_Studio
http://kjellkod.blogspot.com/2007/02/qt4-on-free-ide-visual-studio-express.html
習慣看英文的就直接看這篇。

測試環境是:
Visual C++ 2005 Express SP1
Windows SDK Update for Windows Vista
Qt/Windows Open Source Edition 4.3.0

一、預先需求與設定

在編譯 Qt4 我們總共需要:

1. Qt4/Windows Open Source Edition
http://trolltech.com/developer/downloads/qt/windows

2. Qt4 patch for Advanced Compiler Support:
http://sourceforge.net/project/showfiles.php?group_id=49109&package_id=165202

3. Windows SDK
這個用 Windows Vista 還是 Windows Server 2003 都可以,
Vista 的 ISO 檔: http://0rz.tw/832Sb
exe 檔: http://0rz.tw/1b2SW

將 1. 跟 2. 解壓縮到同一個目錄後, 執行 installpatch43.bat 進行 patching。

二、Windows SDK 設定:

1. 安裝 Windows SDK, 依照指示進行即可。
除了 Headers and Libraries 之外, 都可以不用裝。

2. (非必需) 若是用 Visual C++ 2005 Express, 需要再將 Win SDK 的目錄加進環境變數中以及 VC++ IDE 的設定:

2a. 執行 Microsoft Windows SDK \ Visual Studio Registration \Integrate Windows SDK with Visual Studio 2005

2b. 開啟 C:\Program Files\Microsoft Visual Studio 8\Common7\Tools\vsvars32.bat

2c. 檔案開頭加入以下指令:

@set PATH=C:\Program Files\Microsoft\SDKs\Windows\v6.0\Bin;%PATH%
@set INCLUDE=C:\Program Files\Microsoft\SDKs\Windows\v6.0\Include;%INCLUDE%
@set LIB=C:\Program Files\Microsoft SDKs\Windows\v6.0\Lib;%LIB%

(以上目錄請依自己環境作修改)

三、編譯 Qt4

先決定好 Qt4 安裝的目錄(例 C:\Qt4), 不要有空格, 底下皆用 C:\Qt4;而 Qt4 的原始檔目錄則用 D:\Qt4-src。請依自己的設定改變。

1. 複製 D:\Qt4-src\mkspecs 目錄到 C:\Qt4

2. 執行 Visual Studio command prompt (Visual Studio 命令提示字元)

3. 到 D:\Qt4-src 中, 執行
qconfigure spec -prefix C:\Qt4 [options] && nmake

其中 spec 可以是

msvc (給 VC6 環境用)
msvc.net (給 VS .NET 2003 環境用)
msvc2005 (給 VC 2005 環境用)

依照你的環境選擇;options 請參閱 configure.exe -h 輸出的說明。-prefix 選項後接 C:\Qt4, 之後會直接安裝到該目錄。

4. (非必需) 若用 msvc2005 編譯的, 因為會產生 .manifest 檔案, 直接安裝會漏掉, 解決方法有三:

一. 將 .manifest 檔案手動複製至 C:\Qt4;

二. 用 mt 將 .exe 跟 .manifest 檔案合併:

4a. 先開啟 Visual Studio Command Prompt:
4b. 到 D:\Qt4-src 目錄
4c. 執行

for /r %f in (*.exe.manifest) do mt -manifest %f -outputresource:%~dpnf;#1

三. 直接修改 qmakespec, 找到 CONFIG = … 最後加入

embed_manifest_exe embed_manifest_DLL

5. 若編譯沒出現任何問題的話, 執行

nmake install

安裝,或是分成三個指令

nmake install_qmake
nmake sub-src-install_subtargets
nmake install_htmldocs

(我沒試過)

ok, 現在可以到 QTDIR\bin 中執行任一個執行檔, 例 designer 看有沒有問題 :p

四、設定 Qt4 環境環境變數:

1. 到 控制台 \ 系統 \ 進階 \ 環境變數

2. 新增兩個系統變數
變數名稱: QTDIR
變數值: C:\Qt4

變數名稱: QMAKESPEC
變數值: win32-msvc2005
(若用 msvc.net 就用 win32-msvc.net 依此推類)

3. 修改 PATH 變數值, 最後增加 C:\Qt4。

五、設定 Visual Studio 環境變數:

1. 開啟 VS, 到 Tools \ Options \ Projects and Solutions \ VC++ Directories
2. 選 Includes Files 將下列全部加進去:

$(QTDIR)\include
$(QTDIR)\include\Qt
$(QTDIR)\include\QtCore
$(QTDIR)\include\QtGui
$(QTDIR)\include\QtNetwork
$(QTDIR)\include\QtSvg
$(QTDIR)\include\QtXml
$(QTDIR)\include\Qt3Support
$(QTDIR)\include\ActiveQt

3. 選 Library files 加入 $(QTDIR)\lib
4. (非必備) 若要用 Intellisense, 就需要以下步驟:

4a. 將 D:\Qt4-src\src 目錄複製到 C:\Qt4
4b. 選 Source files 加入 $(QTDIR)\src

這樣就大抵完成了。

六、編譯 Qt 程式

開啟 Visual C++ 2005 後:

1. File \ New Project \ Visual C++ \ General \ Makefile Project

2. 接下來要把 qmake 跟 nmake 指令合併,

2a. 點 next, 設定 debug configuration,

Build Command Line:
qmake -project && qmake && nmake debug

Rebuild Command Line:
qmake -project && qmake && nmake debug

Clean Command Line:
nmake debug-clean

2b. 點 next, 設定 release configuration,

Build Command Line:
qmake -project && qmake && nmake release

Rebuild Command Line:
qmake -project && qmake && nmake release

Clean Command Line:
nmake release-clean

完成後點選 Done,也可以順便匯出成 project template。

2c. 最後, 若要 debug 必須再設定將 Configuration Properties \ Debug \ Command 設定到該程式檔。

3. 這樣應該就可以 build, 隨便拿 Tutorial 上的範例編編看。Try it.

Advertisements

One thought on “用 Visual C++ Express 編譯 Qt4/Win Open Source Edititon

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s