簡體   English   中英

使用 Visual Studio 2012 / Visual Studio 2013 構建 Qt5,並與 IDE 集成

[英]Building Qt5 with Visual Studio 2012 / Visual Studio 2013, and integrating with the IDE

如何讓 Qt5 下載並與 Visual Studio 2012 集成? 您會遇到哪些問題,您如何解決這些問題?

更新重新。 視覺工作室 2013

Visual Studio 2013 也報告了成功,並且正在為 VS 2013 維護注釋。

另請注意,問題的重點是僅使用 Visual Studio構建Qt。 還有關於與 Visual Studio IDE 集成的注意事項

此方法經測試適用於 Visual Studio 2013。此處提供使用 Visual Studio 2012 和 2013 的預構建二進制文件,包括 OpenGL 版本。

第 1 步:設置

  1. 在此處下載並安裝 RapidEE。 RapidEE 是一個 windows 環境變量編輯器。 它對這個過程的其余部分非常有用(一般來說)。

  2. 安裝 DirectX 11 SDK。 它現在是 Windows 8 SDK 的一部分,因此您首先必須安裝 DirectX 10 SDK,您可以在此處獲取(但請參閱下一句中的警告)。 如果您安裝了 Visual C++ 2010 Redistributable Package,並且您可能安裝了(它與 VS 2010 一起自動安裝),請按照此處列出的步驟幫助安裝 DirectX 10。 安裝 DirectX 10 SDK 后,請在 此處下載並安裝 Windows 8 SDK,其中包含 DirectX 11 SDK。 是的,這很痛苦,但除非您知道自己擁有 DirectX 11 SDK,否則 Qt 構建將失敗

  3. Python.orgAnaconda Python安裝 Python for Windows(我聽說過 2.6+,使用 3.3)。

  4. ActiveState安裝 Perl for Windows。


第 2 步:Gitting (和構建) Qt5 (是的,這意味着 Git

  1. 按照 qt-project 網站上的Windows 安裝指南進行操作

    概括

    總結以上鏈接和以下注釋中的詳細信息(如果您有任何錯誤,請參閱以下注釋;它們可能會得到解答):

    • 卸載 Avast(如果已安裝)以避免構建錯誤。 是的,字面意思是卸載它。 從您的系統中 100% 刪除它。 停用它是行不通的 請參閱下面的詳細說明。

    • 注意第一步:不要在下面的第一次git pull 中使用 SmartGit(除非你真的知道你在做什么),因為 SmartGit 的默認值會拉取所有東西,這不是你想要的。

    • 必須安裝Windows 版 Git

    • 決定要將Qt安裝放在何處,然后從任何命令提示符窗口cd到將包含新安裝的目錄。 (因為這個過程非常脆弱且容易出錯,我個人直接把它放在C: ,但這可能沒有必要)。

    • 從上面的目錄,執行:

      git clone git://gitorious.org/qt/qt5.git qt5

      這很快。 完成后,您應該在 'stable' 分支上,但您始終可以在cd進入新創建的qt5目錄后運行git checkout stable ,以確保安全。 使用git checkout 5.4.1已確認適用於 VS2013 64 位。

    • 在繼續下一步之前,關閉當前的命令提示符窗口(如果它不是 Visual Studio 命令提示符窗口)。 這是為了確保您在接下來的步驟中使用 Visual Studio 命令提示窗口。

    • 接下來運行 32 位 (x86) 或 64 位 VS Tools 命令提示符(取決於您將 Qt5 構建為 32 位還是 64 位)。 要訪問它,您必須通過“開始”菜單找到它 - 轉到Program Files -> [Microsoft] Visual Studio 2012/2013 -> Visual Studio Tools ,您會在其中看到一個有趣的名字; 該名稱應包含短語Native Tools 32 位版本的名稱中將包含x86 ,而 64 位版本的名稱中將包含x64

    • cd進入上面步驟中新創建的qt5目錄。

    • 從 Visual Studio 命令提示符中,必須下載其余的 Qt 子模塊:

      perl ./init-repository --no-webkit

      執行此步驟需要一些時間,因為它必須下載大量內容,但在良好的連接上並不算太糟糕。

    • 然后下載init-repository未下載的任何剩余可選子模塊 - SmartGit 僅在此階段開始運行良好(請參閱下面的評論)。

    • Qt 下載完成后,以下命令准備構建環境(也應使用 [32|64] VS Native Tools 命令提示符執行):

      configure -developer-build -opensource -confirm-license -mp -nomake examples -nomake tests -debug-and-release -c++11 -no-warnings-are-errors -platform win32-msvc2012

      此命令行的注意事項: c++11選項對於 VS2012 編譯器可能不是必需的,但適用於 VS2013; -no-warnings-are-errors是必要的,以防萬一您在 64 位自動構建 ANGLE 時遇到錯誤; -platform自動設置為win32-msvc2012 ,因此默認情況下使用 Qt 的 32 位版本,並且 -platform 可能不需要在命令行中提供(即使您安裝了以前版本的 VS)。 對於 VS2013,請使用-platform win32-msvc2013

      執行這一步需要幾分鍾,但還不錯。

    • 最后,在系統上實際構建 Qt 的命令(也在 VS Native Tools 命令提示符中運行)很簡單:

      nmake

      預計等待數小時才能完成構建。 如果您使用-prefix指定了一個輸出文件夾(請參閱下面的注釋),則使用nmake install ,否則就是這樣。


筆記:

一般注意事項

如果您對上面鏈接的文檔感到困惑,只是一個僅供參考,將使用 ANGLE 庫(默認情況下)而不是 OpenGL,這就是您必須安裝 DirectX 11 的原因,上面。

確保您使用 VS Native Tools 命令提示符運行來自上述鏈接的所有命令(即perl .\\init-repository --no-webkitconfigurenmake )。 您將使用 [32|64] 位命令提示符( x86x64 ),具體取決於您將 Qt 構建為 32 位還是 64 位。 如果在命令提示符打開的情況下安裝 perl(確保它在PATH ),則需要重新啟動命令提示符以使 perl 被識別為命令。

運行“init-repository”時(來自上面鏈接中的步驟),文檔中不清楚,但您必須通過perl執行它; perl ./init-repository --no-webkit 但是, configurenmake命令是直接調用的。

傳遞給configure一個非常有用的選項是-mp ,它會導致 Qt 在多個內核上並行構建,從而顯着加快(長)構建時間。

要指定輸出文件夾,請將-prefix [outfolder]添加到configure命令。 例如,使用-prefix %CD%\\output\\x64\\vc12將是適合 64 位 Visual Studio 2013 (12.0) 版本的輸出(子)文件夾。


Unicode 支持 (ICU)

如果您需要 Unicode 支持(通過ICU ),請特別注意上面鏈接中注明的說明。 總而言之,ICU 必須在 VS 2012 中從頭開始構建,因為 Windows 的唯一預構建 ICU 二進制文件適用於 VS 2010。在 VS 2012 中構建是無痛的 - 只需在 <icuroot>\\icu\\source 中找到 ICU 解決方案 (.sln) \\allinone,並在 Debug 和 Release 模式下構建(在 32 位或 64 位模式下,取決於您構建 Qt 的模式 - 不要構建其他位,因為 ICU 將覆蓋輸出文件夾二進制文件)。 (Qt 構建過程將正確定位 ICU 的調試版本與發布版本。)它應該沒有錯誤地構建。 然后,將 <icuroot>\\lib 的路徑添加為名為“LIB”的(可能)新 Windows 環境變量中的字符串條目(您可以為此使用 Rapid EE;即使只有1 個條目),並將 <icuroot>\\include 的路徑添加為(可能)名為“INCLUDE”的新 Windows 環境變量中的字符串條目。 (注意:將這些路徑添加到 PATH 變量將不起作用。)在構建 Qt 之后,您可以刪除所有剛剛添加的這些條目。 此外,請務必將 ICU dll (<icuroot>\\bin) 的運行時路徑添加到環境的 PATH 變量中,否則 Qt 構建過程(特別是在uic.exe運行時)會產生欺騙性和誤導性錯誤 最后,在configure命令行(如下),一定要添加-icu作為額外的命令行參數。

ICU 故障

目前,當啟用 ICU 時,使用 VS2012 編譯器構建 Qt5 似乎存在錯誤。 具體來說, qtbase\\src\\corelib\\codecs\\qtextcodec.cpp Line 688 (Qt5 v5.02) 無法返回編解碼器名稱“US-ASCII”的編解碼器(編解碼器為NULL),導致“lrelease.exe”崩潰時稍后嘗試取消引用編解碼器(我已經忘記了該文件/行號,但它顯然是對 NULL codec變量的取消引用)。 不幸的是,這意味着,據我所知, WebKit 不能用(至少)32 位版本的 Qt5 和 VS2012 編譯器來構建,因為 WebKit 需要 ICU。

如果有人能夠在啟用 ICU 的情況下使用 VS2012 編譯器構建 Qt5,請更新此 Wiki 說明。

ICU澄清

如果您的路徑中有 ICU,Qt 將自動構建它。 換句話說,標志“ -icu ”是隱含的。 但是,這會導致如上所述的“lrelease.exe”錯誤。 所以解決這個問題的方法是在配置命令中添加標志 -no-icu


附加子模塊

如果除了默認子模塊之外還需要子模塊,可以完成init-repository命令使用 SmartGit(或命令行)。 SmartGit 可能是最簡單的,因為您不需要將路徑復制到命令行,而是可以直接使用用戶界面。

警告:不要下載可選的qlalr模塊,因為它不會與整個 Qt 構建結合構建,並且對於 Qt 用戶來說不是必需的,但僅用於內部 Qt 開發。

警告:必須使用 shell 命令行,后跟perl .\\init-repository --no-webkit (不是 SmartGit); 這些步驟只會正確下載默認的 Qt 子模塊。 不能使用 SmartGit 從git://gitorious.org/qt/qt5.git克隆和下載 Git 文件,因為 SmartGit 當前無法正確處理子模塊。 相反,打開標准的 Windows shell 命令提示符(使用任何命令提示符應用程序,不一定是 VS Tools 命令提示符),並且(假設 Git 已正確安裝在系統上;SmartGit 安裝可能會也可能不會自動執行此操作;如果它不,轉到Git for Windows並直接安裝)直接從命令行鍵入git clone git://gitorious.org/qt/qt5.git 也許遵循git checkout stable (我不確定這個分支是否默認被簽出); 然后使用命令行perl .\\init-repository --no-webkit拉下 DEFAULT 存儲庫(WebKit 除外,它需要 ICU 和 ICU 似乎無法使用 VS2012 在 32 位 Qt5 中構建;請參閱注釋)。

因此,下載所有必需的 Qt 源文件的步驟是: 1. 使用 Windows 命令行執行初始git clone git://gitorious.org/qt/qt5.git 2. 在 VS Tools 2012 命令提示符中執行perl .\\init-repository --no-webkit 然后可選 3. 使用 SmartGit(來自上面的鏈接)(或等效項)“打開現有項目”(選擇 Qt5 根文件夾)並從 SmartGit 中拉取以下載任何非默認存儲庫(但不要下載qlalr )。 而已; 您的系統上擁有所有必需和可選的 Qt 文件(包括子模塊)。

如果有人發現無法構建和/或僅供內部使用的其他可選子模塊(除了qlalr ),請更新此 Wiki 以指定它們。

一般來說,通過perl .\\init-repository --no-webkit獲得的默認子模塊就足夠了。 如果您知道或稍后發現其他(非默認)模塊,您可以隨時添加它們。


一般問題

如果在某個時候您收到錯誤消息,指出無法識別命令“python”(或任何類似的東西),只需檢查包含python.exe (或相應的.exe )的文件夾是否是路徑變量的一部分。 如果不是,請添加它(為了方便起見,請使用上面提到的 RapidEE)並再次嘗試您正在執行的操作。 如果存在,請確保在將命令添加到路徑后重新啟動了命令提示符。

另外兩個與路徑相關的問題需要注意(引自與上述鏈接相關的文檔):“確保在 msysgit 提供的 perl 可執行文件之前的路徑中找到 perl 可執行文件,因為后者已過時”; 和“如果 sh.exe 在您的 PATH 中,您可能無法構建(例如,由於 git 或 msys 安裝)。這樣的錯誤由 qt5-srcqtbasebinqmake.exe: command not found 等指示。在這種情況下,請確保 sh.exe 不在您的路徑中。如果您的安裝已經配置,則必須重新配置。

在此過程中,您可能會在文件上使用nmake時遇到錯誤。 如果這樣做,只需進入該目錄並強制構建問題文件。 然后再次在 Qt5 上開始nmake過程。


具體問題

警告:您可能需要在 Qt nmake過程中禁用防病毒軟件和沙盒(為了安全起見,在整個過程中)。 在內部,Qt 會執行許多防病毒程序可能會干擾的可執行文件(有時是靜默的)。 特別是,如果您有任何沙盒軟件,請務必禁用沙盒。

警告: AVAST! 沙盒用戶:Avast Sandbox 有一個錯誤,即使您禁用 Avast 的自動沙盒,沙盒也不會關閉,它會在 Qt 的構建過程中靜默地沙盒由 Qt 的rcc程序自動創建的所有資源文件。 對於安裝了 Avast 自動沙盒功能的任何用戶,Qt 構建總是失敗,即使自動沙盒關閉。 解決此問題的唯一方法是完全卸載 AVAST! 在構建 Qt 之前從您的系統。 您可以重新安裝 Avast! Qt構建完成后。


Qt5 的編譯可能需要很長時間(數小時,即使使用 -mp 多線程選項)。 耐心。


第 3 步:將 Qt5 與 Visual Studio 2012 集成

  1. 下載並安裝 Visual Studio Qt5 插件 它位於頁面底部附近的“其他下載”部分,不能與 Visual Studio Express 一起使用。

  2. 打開 Visual Studio 2012,然后轉到Qt Options (位於頂部菜單欄的“Qt5”下)。

  3. 在 Qt 版本選項卡中,檢查 Qt5 是否已經存在。 如果不是,請單擊添加,選擇版本名稱(可能是 5.xx 之類的名稱),然后導航到包含qmake.exe的文件夾(通常為C:\\Qt\\qt5\\qtbase )。

  4. 退出 Qt 選項對話框。

  5. 創建一個新的 Visual Studio 項目。 當您看到 New Project 對話框時,您應該會看到Qt5 Projects Template 選項。

  6. 有了新的 Qt 項目后,右鍵單擊它並選擇“轉換為 QMake 生成的項目”。 構建項目,然后再次右鍵單擊它並選擇“將項目轉換為 Qt 插件項目”。 再次構建,然后運行。 您現在應該有一個有效的 Qt 項目。


將 Qt5 添加到現有的 Visual Studio 2012 VC++ 項目

本節可能適合您,也可能不適合。 如果您遇到問題或有其他/更好的解決方案,請發表評論或編輯適當的步驟。

  1. 在 VS 中右鍵單擊您的項目,然后選擇“卸載項目”。 再次右鍵單擊該項目,然后選擇“編輯 [項目名稱].vcxproj”。 這將打開項目文件,以便您可以向其中添加 Qt5。

  2. 轉到 Global PropertyGroup,將<Keyword>添加或更改為 Qt4VSv1.0。

  3. 重新加載項目,然后右擊並選擇“Convert project to Qt Add-in project”

  4. 等待轉換完成(不會超過幾秒鍾),然后選擇Qt5>Project Settings 轉到 Modules 選項卡,並檢查您希望項目依賴的模塊(基本模塊是CoreWidgetsGUI )。

  5. 按照此處的步驟,添加目錄$(QTDIR)\\include


    筆記:

    如果在任何時候包含windows.h ,則需要這樣做之前#define NOMINMAX以防止與qdatetime.h發生沖突。

    完成上述步驟后,您可以通過選擇Qt5>Create basic .pro file使 Qt Creator 可以使用您的項目。


結束說明:如果您有與本指南中包含的信息相關的問題,請將其作為新問題發布(此處不是答案),並且可能會添加答案或答案鏈接。

我成功地將 Qt 5.0.2 與 Windows 7 上的 Visual Studio 2012 基於上面的優秀維基和這個 qt-project 鏈接以及。 由於我以稍微不同的方式制作了一些步驟,因此我認為將其發布在這里是有效的:

下面的序列應該按照給定的確切順序執行:

0 - 卸載 Avast(如果已安裝)以避免構建錯誤。 由於 Avast 錯誤,停用它不起作用;

1 - 安裝 Git (>= 1.6.x);

2 - 安裝 Python (>=2.6.x)。 [python.org];

3 - 安裝 Perl (>=5.14)。 [activestate.com];

4 - 安裝 Ruby。 [rubyinstaller.org];

5 - 打開 Windows 7 命令提示符(現在不要使用 VS2012 開發人員命令提示符);

6 - 為 qt5 選擇您想要的任何目錄,關於所選路徑不允許空格 我決定使用路徑 "C:\\qt5";

7 - 回到 Windows 7 命令提示符(在我的例子中,提示“C:\\qt5>”)輸入:

git clone git://gitorious.org/qt/qt5.git qt5

8 - 檢查穩定版本:

cd qt5
git checkout stable

9 - 您可能會收到一條消息,確認此版本已經穩定。 關閉命令提示符;

10 - 打開 Visual Studio 的開發人員控制台(所有程序 > Visual Studio 2012 > Visual Studio Tools > Developer Command Prompt for VS2012)並將當前目錄更改為您選擇的目錄(在我的示例中為“C:\\qt5”);

11 - 下載 Qt 子模塊,忽略 webkit(構建錯誤的常見來源...):

perl .\init-repository --no-webkit

12 - 現在輸入這個巨大的命令來正確配置你的構建:

configure -developer-build -opensource -nomake examples -nomake tests -nomake demos -debug-and-release -c++11 -mp -nomake webkit -confirm-license

13 - 接下來,確保不會構建模塊qlalr 為此,請打開 Windows 資源管理器並導航到您選擇的 Qt 目錄(在我的示例中為“ C:\\qt5 ”)並檢查文件夾qlalr 是否存在。 如果是,刪除它;

14 - 構建時間... 可能的構建錯誤來自次要模塊(例如 webkit),它們不會影響主要的 Qt 功能(webkit 本身應該不是問題,因為我們之前已經將配置設置為不構建它)。 然后我們可以忽略它們並保持構建在獨立模塊上運行:

nmake /I /K

15 - 要完成集成,請按照上面社區維基的第 3 步(“第 3 步:將 Qt5 與 Visual Studio 2012 集成”)。

只想提一下,在http://qt-project.org/downloads上有一個適用於 Visual Studio 2012 的 Qt 5.2 的預構建版本。 因此,如果您對從源代碼構建 Qt 5 沒有特別興趣,您也可以使用預構建二進制文件。

Tver-Soft 網站上還有一些針對不同編譯器版本的預編譯 (x64) 二進制文件。

我終於能夠使用 Visual Studio 2012 在 Windows 8 x64 上用 QWebKit 編譯 QT 5.1 (git) 並認為我也會與那些有問題的人分享我的經驗。

執行上述帖子中所述的第 1 步和第 2 步。 我嘗試執行第 3 步,但 SmartGit 提取了一堆無法使用 Qt5 編譯的額外項目。 我能夠通過從不同的分支(例如https://qt.gitorious.org/qt/qt3d/ )進行克隆來解決大部分問題,但是對於每個額外的模塊來說這變得太乏味了,所以我決定不編譯任何一位。

ICU support in a 32-bit build of Qt5 with VS2012 compiler的帖子導致Qt5構建失敗; Webkit 也因此 unbuildable告訴我如何解決 ICU 問題。

http://download.icu-project.org/files/icu4c/51.2/icu4c-51_2-src.zip下載源代碼並添加行

#define U_CHARSET_IS_UTF8 1

到文件 %ICU%\\source\\common\\unicode\\platform.h ,其中 %ICU% 是 ICU 源代碼的路徑。

在 Visual Studio 2012 中打開 %ICU%\\source\\allinone\\allinone.sln 文件並編譯。 將 %ICU%\\bin 添加到您的路徑中

set PATH=%ICU%\bin64;%PATH%

然后我在QT根目錄下運行以下命令

configure -platform win32-msvc2012 -opengl desktop -opensource -debug-and-release -I %ICU%\include -L %ICU%\icu\lib64 -mp -qt-freetype -icu

在這一點上,我開始懷疑沒有人試圖做我正在做的事情,因為 nmake 開始抱怨 makefile 中的意外行(所有這些都具有擴展名 DerivedSources,例如 Makefile.JavaScriptCore.DerivedSources 和 Makefile.WebCore.DerivedSources ))

(set PATH=<stuff>;%PATH%) && ....

在運行 nmake 之前手動設置 PATH 並刪除直到包括 && 的字符,例如

 (set PATH=<stuff>;%PATH%) && perl -ne "print $1" css\CSSPropertyNames.in ...

成為

perl -ne "print $1" css\CSSPropertyNames.in ...

最后,這些文件之一將嘗試調用 win_flex.exe(或 win-flex.exe)而不是 flex。 我將其更改為 flex.exe 並最終編譯所有內容(不得不更改兩次,因為我認為該文件已重新生成)。

使用 QWebKit 並鏈接到此構建的程序的簡要經驗使我相信一切都很好。

- 更新 -

只是為了完整。 根據(set PATH=...;%PATH:)=^)%) 在 Windows shell 腳本中是什么意思,以及如何在 Qt5 nmake 構建的上下文中克服此行的失敗? (指向http://qt-project.org/forums/viewthread/20605 )大多數 Makefile 問題應該可以通過使用 jsom 而不是 nmake 來解決(盡管我仍然想知道 win-flex.exe)

使用 Visual Studio 2015 編譯 Qt 5.5:

1- 修改qtbase目錄下的configure.bat,生成configure.exe(前18行)

  @echo off
set QTSRC=%~dp0
set QTDIR=%CD%
rem if not exist %QTSRC%.gitignore goto sconf
echo Please wait while bootstrapping configure ...
 
for %%C in (cl.exe icl.exe g++.exe perl.exe) do set %%C=%%~$PATH:C
 
rem if "%perl.exe%" == "" (
rem    echo Perl not found in PATH. Aborting. >&2
rem    exit /b 1
rem )
if not exist mkspecs (
    md mkspecs
    if errorlevel 1 goto exit
)
rem perl %QTSRC%bin\syncqt.pl -minimal -module QtCore -outdir "%QTDIR%" %QTSRC%
rem if errorlevel 1 goto exit

2- configure -opensource -confirm-license -mp -nomake examples -nomake tests -release -c++11 -no-warnings-are-errors -platform win32-msvc2015 -no-ltcg

3- nmake

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM