在 Windows 命令提示字元安裝 Qt SDK


這篇算是《GitLab CI + Windows Docker 的一些紀錄》的延伸。由於 Heresy 這邊的開發專案有用到 Qt SDK(官網),所以在建置用的 Docker 容器裡面,也需要安裝 Qt 的 SDK。

但是由於 Qt 現在的線上安裝程式也都是以圖形介面為主,並在圖形介面中選擇要安裝那些套件;所以要怎麼在沒有圖形介面的 Docker 內安裝,就需要稍微研究一下了。

在找了一些資料後,可以知道 Qt 的安裝程式框架(Qt Installer Framework、QTIFW、官方文件)是有支援使用腳本(script)來做控制的!(官方文件

而在網路上,也可以找到使用這樣的機制,來自動安裝  Qt 的腳本範例。Heresy 這邊是參考《How can I install Qt 5.2.1 from the command line in Cygwin?》的例子。

下面就是目前使用的檔案、qt-install.qs

function Controller() {
   installer.autoRejectMessageBoxes();
   installer.installationFinished.connect(function() {
     gui.clickButton(buttons.NextButton);
   }) } Controller.prototype.WelcomePageCallback = function() {
   gui.clickButton(buttons.NextButton, 3000); } Controller.prototype.CredentialsPageCallback = function() {
   gui.clickButton(buttons.NextButton); } Controller.prototype.IntroductionPageCallback = function() {
   gui.clickButton(buttons.NextButton); } Controller.prototype.TargetDirectoryPageCallback = function() {
   gui.currentPageWidget().TargetDirectoryLineEdit.setText("C:/Qt/");
   gui.clickButton(buttons.NextButton); } Controller.prototype.ComponentSelectionPageCallback = function() {
   var widget = gui.currentPageWidget();
   widget.deselectAll();
   widget.selectComponent("qt.qt5.5131.win64_msvc2017_64");
   gui.clickButton(buttons.NextButton); } Controller.prototype.LicenseAgreementPageCallback = function() {
   gui.currentPageWidget().AcceptLicenseRadioButton.setChecked(true);
   gui.clickButton(buttons.NextButton); } Controller.prototype.StartMenuDirectoryPageCallback = function() {
   gui.clickButton(buttons.NextButton); } Controller.prototype.ReadyForInstallationPageCallback = function(){
   gui.clickButton(buttons.NextButton); } Controller.prototype.FinishedPageCallback = function() {
   var checkBoxForm = gui.currentPageWidget().LaunchQtCreatorCheckBoxForm
   if (checkBoxForm && checkBoxForm.launchQtCreatorCheckBox) {
     checkBoxForm.launchQtCreatorCheckBox.checked = false;
   }
   gui.clickButton(buttons.FinishButton); }

這邊主要的概念,基本上就是在介面出現(實際上也不會真的出現)後,讓安裝程式自己去按 Next 的按鈕。

而可能要修改的地方,則是 TargetDirectoryPageCallbackComponentSelectionPageCallback;前者是指定要把 Qt 安裝到哪裡(這邊是 c:/Qt/)、後者則是選擇要安裝的套件。

在套件名稱的部分,可以參考官方的 Qt SDK Repository(連結);點選需要的 Qt SDK 版本後(例如這邊是選 qt5_5131),裡面的資料夾名稱基本上就是套件的名稱了。

而 Heresy 這邊因為只有用到 Visual C++ 2017 x64 環境下最基本的東西,所以只要選擇 qt.qt5.5131.win64_msvc2017_64 就可以了。如果有需要其他模組的話,也可以自行添加 widget.selectComponent() 命令。

之後呢,只要下載 Qt 的安裝程式(網站),透過下面的指令:

qt-unified-windows-x86-online.exe --script qt-install.qs

就可以在沒有圖形介面的情況下、完成安裝了。

而如果希望有訊息顯示的話,則可以再加上「-v」、來顯示安裝進度。


基本上,這樣就可以用了,也可以成功地放進 Dockerfile 裡面執行。

不過,目前是還有兩個小問題:

  • Qt 下載的時候,由於台灣似乎沒有鏡像站,所以都是連到大陸去下載,速度很慢…
    然後研究了一陣子,又不知道怎麼透過角本或指令來設定 proxy(他只能設定開或關),變得滿麻煩的。

  • 不知道為什麼,有的啥後記錄出現「Using control script:」後就不動了。
    但是通常重跑一次就好了,所以暫時就不管了。

由於基本上問題都不算太大,所以應該就先這樣用了吧。

對「在 Windows 命令提示字元安裝 Qt SDK」的想法

發表迴響

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com 標誌

您的留言將使用 WordPress.com 帳號。 登出 /  變更 )

Google photo

您的留言將使用 Google 帳號。 登出 /  變更 )

Twitter picture

您的留言將使用 Twitter 帳號。 登出 /  變更 )

Facebook照片

您的留言將使用 Facebook 帳號。 登出 /  變更 )

連結到 %s

This site uses Akismet to reduce spam. Learn how your comment data is processed.