【转】09.认识一下Qt用到的开发工具
Qt?不是憑空產(chǎn)生的,它是基于現(xiàn)有工具鏈打造而成的,它所使用的編譯器、鏈接器、調(diào)試器等都不是自己的,Qt 官方只是開發(fā)了上層工具。下面我們分幾個部分講解 Qt 使用到的工具鏈。
GNU 工具集
在上個世紀(jì)八十年代,計算機(jī)都是奢侈品,操作系統(tǒng)里最著名的是 Unix 家族, 當(dāng)時還沒有 Windows、Linux 之類的,Unix 系統(tǒng)都是商業(yè)軟件,里面的應(yīng)用軟件也是商業(yè)軟件, 全是封閉的環(huán)境。
系統(tǒng)程序員 Richard M. Stallman (RMS) 在此環(huán)境下創(chuàng)立了與眾不同的?GNU 項目?(GNU's Not Unix) , 以及推進(jìn)自由軟件發(fā)展的?Free Software Foundation (FSF) 自由軟件基金會。
GNU 項目是為了創(chuàng)建自由的類 Unix 系統(tǒng),也因此開發(fā)出來很多開源的系統(tǒng)工具,其中非常著名的就是?GCC?(GNU Compiler Collection,GNU編譯器套件)。
在 GNU 工具集里面,開發(fā)時常見到的幾個羅列如下(這些工具通常位于 Linux 或 Unix 系統(tǒng)里的 /usr/bin/ 目錄):
?
| gcc | GNU C 語言編譯器。 |
| g++ | GNU?C++?語言編譯器。 |
| ld | GNU 鏈接器,將目標(biāo)文件和庫文件鏈接起來,創(chuàng)建可執(zhí)行程序和動態(tài)鏈接庫。 |
| ar | 生成靜態(tài)庫 .a ,可以編輯和管理靜態(tài)鏈接庫。 |
| make | 生成器,可以根據(jù) makefile 文件自動編譯鏈接生成可執(zhí)行程序或庫文件。 |
| gdb | 調(diào)試器,用于調(diào)試可執(zhí)行程序。 |
| ldd | 查看可執(zhí)行文件依賴的共享庫(擴(kuò)展名 .so,也叫動態(tài)鏈接庫)。 |
MinGW
原本 GNU 工具只在 Linux/Unix 系統(tǒng)里才有,隨著 Windows 系統(tǒng)的廣泛使用, 為了在 Windows 系統(tǒng)里可以使用 GNU 工具,誕生了 MinGW(Minimalist GNU for Windows) 項目,利用 MinGW 就可以生成 Windows 里面的 exe 程序和 dll 鏈接庫。
需要注意的是,MinGW 與 Linux/Unix 系統(tǒng)里 GNU 工具集的有些區(qū)別:
- MinGW 里面工具帶有擴(kuò)展名 .exe, Linux/Unix 系統(tǒng)里工具通常都是沒有擴(kuò)展名的。
- MinGW 里面的生成器文件名為 mingw32-make.exe,Linux/Unix 系統(tǒng)里就叫 make。
- MinGW 在鏈接時是鏈接到 *.a 庫引用文件,生成的可執(zhí)行程序運行時依賴 *.dll,而 Linux/Unix 系統(tǒng)里鏈接時和運行時都是使用 *.so 。
另外 MinGW 里也沒有 ldd 工具,因為 Windows 不使用 .so 共享庫文件。如果要查看 Windows 里可執(zhí)行文件的依賴庫,需要使用微軟自家的 Dependency Walker 工具。Windows 里面動態(tài)庫擴(kuò)展名為 .dll,MinGW 可以通過 dlltool 來生成用于創(chuàng)建和使用動態(tài)鏈接庫需要的文件,如 .def 和 .lib。
MinGW 原本是用于生成 32 位程序的,隨著 64 位系統(tǒng)流行起來, 從 MinGW 分離出來了 MinGW-w64 項目,該項目同時支持生成 64 位和 32 位程序。Qt 的 MinGW 版本庫就是使用 MinGW-w64 項目里面的工具集生成的。
MSYS(Minimal SYStem)
另外提一下,由于 MinGW 本身主要就是編譯鏈接等工具和頭文件、庫文件,并不包含系統(tǒng)管理、文件操作之類的 Shell 環(huán)境, 這對希望用類 Unix 命令的開發(fā)者來說還是不夠用的。 所以 MinGW 官方又推出了 MSYS(Minimal SYStem),相當(dāng)于是一個部署在 Windows 系統(tǒng)里面的小型 Unix 系統(tǒng)環(huán)境, 移植了很多 Unix/Linux 命令行工具和配置文件等等,是對 MinGW 的擴(kuò)展。
MSYS 對于熟悉 Unix/Linux 系統(tǒng)環(huán)境或者要嘗試學(xué)習(xí) Unix/Linux 系統(tǒng)的人都是一種便利。MSYS 和 MinGW 的安裝升級都是通過其官方的 mingw-get 工具實現(xiàn),二者是統(tǒng)一下載安裝管理的。
對于 MinGW-w64 項目,它對應(yīng)的小型系統(tǒng)環(huán)境叫 MSYS2(Minimal SYStem 2),MSYS2 是 MSYS 的衍生版,不僅支持 64 位系統(tǒng)和 32 位系統(tǒng),還有自己的獨特的軟件包管理工具,它從 Arch Linux 系統(tǒng)里移植了 pacman 軟件管理工具,所以裝了 MSYS2 之后,可以直接通過 pacman 來下載安裝軟件,而且可以自動解決依賴關(guān)系、方便系統(tǒng)升級等。裝了 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)是一個開源的跨平臺自動化構(gòu)建工具, 可以跨平臺地生成各式各樣的 makefile 或者 project 文件, 支持利用各種編譯工具生成可執(zhí)行程序或鏈接庫。
CMake 自己不編譯程序, 它相當(dāng)于用自己的構(gòu)建腳本 CMakeLists.txt,叫各種編譯工具集去生成可執(zhí)行程序或鏈接庫。
一般用于編譯程序的 makefile 文件比較復(fù)雜,自己去編寫比較麻煩, 而利用 CMake ,就可以編寫相對簡單的 CMakeLists.txt ,由 CMake 根據(jù) CMakeLists.txt 自動生成 makefile,然后就可以用 make 生成可執(zhí)行程序或鏈接庫。
本教程里面是使用 Qt 官方的 qmake 工具生成 makefile 文件,沒有用 CMake。這里之所以提 CMake,是因為整個 KDE 桌面環(huán)境的茫茫多程序都是用 CMake 腳本構(gòu)建的,另外跨平臺的程序/庫如 Boost C++ Libraries、OpenCV、LLVM、Clang 等也都是用 CMake 腳本構(gòu)建的。以后如果接觸到這些東西,是需要了解 CMake 的。
CMake 項目主頁:https://cmake.org/
KDE 項目主頁:https://www.kde.org/
Qt 工具集
Qt 官方的開發(fā)環(huán)境安裝包里有自己專門的開發(fā)工具,之前用過 qmake 命令。qmake 是 Qt 開發(fā)最核心的工具,既可以生成 Qt 項目文件 .pro ,也可以自動生成項目的 Makefile 文件。
這里將常用的 Qt 開發(fā)工具列表如下:
?
| qmake | 核心的項目構(gòu)建工具,可以生成跨平臺的 .pro 項目文件,并能依據(jù)不同操作系統(tǒng)和編譯工具生成相應(yīng)的 Makefile,用于構(gòu)建可執(zhí)行程序或鏈接庫。 |
| uic | User Interface Compiler,用戶界面編譯器,Qt 使用 XML 語法格式的 .ui 文件定義用戶界面,uic 根據(jù) .ui 文件生成用于創(chuàng)建用戶界面的 C++ 代碼頭文件,比如 ui_*****.h 。 |
| moc | Meta-Object Compiler,元對象編譯器,moc 處理 C++ 頭文件的類定義里面的 Q_OBJECT 宏,它會生成源代碼文件,比如 moc_*****.cpp ,其中包含相應(yīng)類的元對象代碼,元對象代碼主要用于實現(xiàn) Qt 信號/槽機(jī)制、運行時類型定義、動態(tài)屬性系統(tǒng)。 |
| rcc | Resource Compiler,資源文件編譯器,負(fù)責(zé)在項目構(gòu)建過程中編譯 .qrc 資源文件,將資源嵌入到最終的 Qt 程序里。 |
| qtcreator | 集成開發(fā)環(huán)境,包含項目生成管理、代碼編輯、圖形界面可視化編輯、 編譯生成、程序調(diào)試、上下文幫助、版本控制系統(tǒng)集成等眾多功能, 還支持手機(jī)和嵌入式設(shè)備的程序生成部署。 |
| assistant | Qt 助手,幫助文檔瀏覽查詢工具,Qt 庫所有模塊和開發(fā)工具的幫助文檔、示例代碼等都可以檢索到,是 Qt 開發(fā)必備神器,也可用于自學(xué) Qt。 |
| designer | Qt 設(shè)計師,專門用于可視化編輯圖形用戶界面(所見即所得),生成 .ui 文件用于 Qt 項目。 |
| linguist | Qt 語言家,代碼里用 tr() 宏包裹的就是可翻譯的字符串,開發(fā)人員可用 lupdate 命令生成項目的待翻譯字符串文件 .ts,用 linguist 翻譯多國語言 .ts ,翻譯完成后用 lrelease 命令生成 .qm 文件,然后就可用于多國語言界面顯示。 |
| qmlscene | 在 Qt 4.x 里是用 qmlviewer 進(jìn)行 QML 程序的原型設(shè)計和測試,Qt 5 用 qmlscene 取代了舊的 qmlviewer。新的 qmlscene 另外還支持 Qt 5 中的新特性 scenegraph 。 |
總結(jié)
以上是生活随笔為你收集整理的【转】09.认识一下Qt用到的开发工具的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: LG发力游戏领域:高端OLED显示器在路
- 下一篇: 美国一动物园拍到类似狼人生物:当地正征集