認識一下Qt用到的開發工具


http://c.biancheng.net/view/3868.html

 

Qt 不是憑空產生的,它是基於現有工具鏈打造而成的,它所使用的編譯器、鏈接器、調試器等都不是自己的,Qt 官方只是開發了上層工具。下面我們分幾個部分講解 Qt 使用到的工具鏈。

GNU 工具集

在上個世紀八十年代,計算機都是奢侈品,操作系統里最著名的是 Unix 家族, 當時還沒有 Windows、Linux 之類的,Unix 系統都是商業軟件,里面的應用軟件也是商業軟件, 全是封閉的環境。

系統程序員 Richard M. Stallman (RMS) 在此環境下創立了與眾不同的 GNU 項目 (GNU's Not Unix) , 以及推進自由軟件發展的 Free Software Foundation (FSF) 自由軟件基金會

GNU 項目是為了創建自由的類 Unix 系統,也因此開發出來很多開源的系統工具,其中非常著名的就是 GCC (GNU Compiler Collection,GNU編譯器套件)。

現在我們知道,GUN 開發類 Unix 系統的項目失敗了,但是它開發的一系列工具集卻用到了后來的 Linux 內核上,兩者結合形成了今天的各種 Linux 發行版,有興趣的讀者請轉到《 Linux和UNIX的關系及區別》了解更多。

在 GNU 工具集里面,開發時常見到的幾個羅列如下(這些工具通常位於 Linux 或 Unix 系統里的 /usr/bin/ 目錄):

工具 說明
gcc GNU C 語言編譯器。
g++ GNU C++ 語言編譯器。
ld GNU 鏈接器,將目標文件和庫文件鏈接起來,創建可執行程序和動態鏈接庫。
ar 生成靜態庫 .a ,可以編輯和管理靜態鏈接庫。
make 生成器,可以根據 makefile 文件自動編譯鏈接生成可執行程序或庫文件。
gdb 調試器,用於調試可執行程序。
ldd 查看可執行文件依賴的共享庫(擴展名 .so,也叫動態鏈接庫)。

MinGW

原本 GNU 工具只在 Linux/Unix 系統里才有,隨着 Windows 系統的廣泛使用, 為了在 Windows 系統里可以使用 GNU 工具,誕生了 MinGW(Minimalist GNU for Windows) 項目,利用 MinGW 就可以生成 Windows 里面的 exe 程序和 dll 鏈接庫。

需要注意的是,MinGW 與 Linux/Unix 系統里 GNU 工具集的有些區別:

  • MinGW 里面工具帶有擴展名 .exe, Linux/Unix 系統里工具通常都是沒有擴展名的。
  • MinGW 里面的生成器文件名為 mingw32-make.exe,Linux/Unix 系統里就叫 make。
  • MinGW 在鏈接時是鏈接到 *.a 庫引用文件,生成的可執行程序運行時依賴 *.dll,而 Linux/Unix 系統里鏈接時和運行時都是使用 *.so 。


另外 MinGW 里也沒有 ldd 工具,因為 Windows 不使用 .so 共享庫文件。如果要查看 Windows 里可執行文件的依賴庫,需要使用微軟自家的 Dependency Walker 工具。Windows 里面動態庫擴展名為 .dll,MinGW 可以通過 dlltool 來生成用於創建和使用動態鏈接庫需要的文件,如 .def 和 .lib。

MinGW 原本是用於生成 32 位程序的,隨着 64 位系統流行起來, 從 MinGW 分離出來了 MinGW-w64 項目,該項目同時支持生成 64 位和 32 位程序。Qt 的 MinGW 版本庫就是使用 MinGW-w64 項目里面的工具集生成的。

MSYS(Minimal SYStem)

另外提一下,由於 MinGW 本身主要就是編譯鏈接等工具和頭文件、庫文件,並不包含系統管理、文件操作之類的 Shell 環境, 這對希望用類 Unix 命令的開發者來說還是不夠用的。 所以 MinGW 官方又推出了 MSYS(Minimal SYStem),相當於是一個部署在 Windows 系統里面的小型 Unix 系統環境, 移植了很多 Unix/Linux 命令行工具和配置文件等等,是對 MinGW 的擴展。

MSYS 對於熟悉 Unix/Linux 系統環境或者要嘗試學習 Unix/Linux 系統的人都是一種便利。MSYS 和 MinGW 的安裝升級都是通過其官方的 mingw-get 工具實現,二者是統一下載安裝管理的。

對於 MinGW-w64 項目,它對應的小型系統環境叫 MSYS2(Minimal SYStem 2),MSYS2 是 MSYS 的衍生版,不僅支持 64 位系統和 32 位系統,還有自己的獨特的軟件包管理工具,它從 Arch Linux 系統里移植了 pacman 軟件管理工具,所以裝了 MSYS2 之后,可以直接通過 pacman 來下載安裝軟件,而且可以自動解決依賴關系、方便系統升級等。裝了 MSYS2 之后,不需要自己去下載 MinGW-w64,可以直接用 pacman 命令安裝編譯鏈接工具和 git 工具等。

MinGW 項目主頁(含 MSYS): http://www.mingw.org/
MinGW-w64 項目主頁: https://sourceforge.net/projects/mingw-w64/
MSYS2 項目主頁: https://sourceforge.net/projects/msys2/

CMake

CMake(Cross platform Make)是一個開源的跨平台自動化構建工具, 可以跨平台地生成各式各樣的 makefile 或者 project 文件, 支持利用各種編譯工具生成可執行程序或鏈接庫。

CMake 自己不編譯程序, 它相當於用自己的構建腳本 CMakeLists.txt,叫各種編譯工具集去生成可執行程序或鏈接庫。

一般用於編譯程序的 makefile 文件比較復雜,自己去編寫比較麻煩, 而利用 CMake ,就可以編寫相對簡單的 CMakeLists.txt ,由 CMake 根據 CMakeLists.txt 自動生成 makefile,然后就可以用 make 生成可執行程序或鏈接庫。

本教程里面是使用 Qt 官方的 qmake 工具生成 makefile 文件,沒有用 CMake。這里之所以提 CMake,是因為整個 KDE 桌面環境的茫茫多程序都是用 CMake 腳本構建的,另外跨平台的程序/庫如 Boost C++ Libraries、OpenCV、LLVM、Clang 等也都是用 CMake 腳本構建的。以后如果接觸到這些東西,是需要了解 CMake 的。

CMake 項目主頁:https://cmake.org/
KDE 項目主頁:https://www.kde.org/

Qt 工具集

Qt 官方的開發環境安裝包里有自己專門的開發工具,之前用過 qmake 命令。qmake 是 Qt 開發最核心的工具,既可以生成 Qt 項目文件 .pro ,也可以自動生成項目的 Makefile 文件。

這里將常用的 Qt 開發工具列表如下:

 

工具 說明
qmake 核心的項目構建工具,可以生成跨平台的 .pro 項目文件,並能依據不同操作系統和編譯工具生成相應的 Makefile,用於構建可執行程序或鏈接庫。
uic User Interface Compiler,用戶界面編譯器,Qt 使用 XML 語法格式的 .ui 文件定義用戶界面,uic 根據 .ui 文件生成用於創建用戶界面的 C++ 代碼頭文件,比如 ui_*****.h 。
moc Meta-Object Compiler,元對象編譯器,moc 處理 C++ 頭文件的類定義里面的 Q_OBJECT 宏,它會生成源代碼文件,比如 moc_*****.cpp ,其中包含相應類的元對象代碼,元對象代碼主要用於實現 Qt 信號/槽機制、運行時類型定義、動態屬性系統。
rcc Resource Compiler,資源文件編譯器,負責在項目構建過程中編譯 .qrc 資源文件,將資源嵌入到最終的 Qt 程序里。
qtcreator 集成開發環境,包含項目生成管理、代碼編輯、圖形界面可視化編輯、 編譯生成、程序調試、上下文幫助、版本控制系統集成等眾多功能, 還支持手機和嵌入式設備的程序生成部署。
assistant Qt 助手,幫助文檔瀏覽查詢工具,Qt 庫所有模塊和開發工具的幫助文檔、示例代碼等都可以檢索到,是 Qt 開發必備神器,也可用於自學 Qt。
designer Qt 設計師,專門用於可視化編輯圖形用戶界面(所見即所得),生成 .ui 文件用於 Qt 項目。
linguist Qt 語言家,代碼里用 tr() 宏包裹的就是可翻譯的字符串,開發人員可用 lupdate 命令生成項目的待翻譯字符串文件 .ts,用 linguist 翻譯多國語言 .ts ,翻譯完成后用 lrelease 命令生成 .qm 文件,然后就可用於多國語言界面顯示。
qmlscene 在 Qt 4.x 里是用 qmlviewer 進行 QML 程序的原型設計和測試,Qt 5 用 qmlscene 取代了舊的 qmlviewer。新的 qmlscene 另外還支持 Qt 5 中的新特性 scenegraph 。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM