Qt實戰1 如何讓Qt應用程式整合編譯功能?

2022-05-15 06:52:57 字數 1661 閱讀 3656

軟體能夠編譯c/c++源**;

軟體內部實現編譯功能,無需安裝其它開發工具。

最開始的時候其實軟體也是支援編譯功能的,只是借助了visual studio開發工具中的編譯器,這樣使用者在安裝軟體後還要安裝visual studio才行,如此一來顯得特別麻煩。後來想著把visual studio中的編譯功能整合到軟體中,但是發現可行性並不高。

那,有沒有一種簡單可行的辦法,讓軟體不安裝visual studio也能夠編譯**?答案是肯定,使用mingw編譯套件即可實現整合編譯功能。

mingw,是minimalist gnufor windows的縮寫。它是乙個可自由使用和自由發布的windows特定標頭檔案和使用gnu工具集導入庫的集合,允許你在gnu/linux和windows平台生成本地的windows程式而不需要第三方c執行時(c runtime)庫。

其實,在安裝qt的時候只要勾選了mingw元件就能獲取到套件,如下:

ok,安裝完成後套件就獲取到套件了。

套件路徑示例:d:\program\qt\qt5.12.6\tools\mingw730_32

獲取到套件後整合就很簡單了,在qt可執行程式目錄下建立乙個tools目錄(名字自擬),將mingw730_32中的內容全部複製進去即可。

完成上述步驟後,接下來就是寫**了,這裡使用qprocess呼叫指令碼的方式進行編譯,編譯過程資訊可通過訊號槽獲取,然後顯示到介面上,是不是感覺很專業。

void compileutil::startcompilation(const qstring &buildpath)

順利的話,編譯完成後會在原始碼路徑生成exe可執行程式,這時便可獲取到它了。

qstring compileutil::getexecutefile()

}return qstring();

}

此時,生成的可執行程式還不能直接執行,它依賴一些動態庫,現在把相關動態庫複製到可執行檔案目錄下。

void compileutil::copydependentdllfiles()

}infolist = destdir.entryinfolist(qdir::files);

foreach (qfileinfo info, infolist)

}foreach (qstring filename, sourcelist) }}

這裡的處理比較簡單,直接把/tools/bin目錄下所有的dll複製過來,簡單且有效。

到此,通過整合的mingw套件編譯的可執行程式就可以正常執行了。

讓qt應用程式整合編譯功能步驟如下:

整合mingw編譯套件,其實就是乙個目錄;

編寫並呼叫編譯指令碼;

複製依賴的dll檔案。

強烈建議mingw位數和qt應用程式位數保持一致。

相關**

Qt 發布應用程式

qt 官方開發環境使用的動態鏈結庫方式,在發布生成的exe程式時,需要複製一大堆 dll,如果自己去複製dll,很可能丟三落四,導致exe在別的電腦裡無法正常執行。因此 qt 官方開發環境裡自帶了乙個工具 windeployqt.exe。以官方 qt 5.8.0 mingw 開發環境為例,從開始選單...

Qt發布應用程式

1.首先找到你的qt的安裝位置 例如我的位置 d qt58 找到d qt58 5.8 msvc2015 64 bin windeployqt.exe 2.找到你想要發布的應用程式的資料夾 例如我的位置 d xx qtdoc build release release xtest.exe 3.管理員方...

如何讓Qt應用程式只有乙個例項

在實際應用中,我們經常需要讓應用程式只有乙個例項,再開啟新的文件或者頁面時,只是替換現在的視窗或者新開啟乙個標籤,而不是重新啟動一次應用程式。qt中是否可以做到這樣呢,答案是肯定的,因為 qt本身可以直接呼叫系統 api,肯定可以做到,但是我們希望找到乙個跨平台的通用的解決方案。這就要用到qt的 q...