最近需要下載 Redis Desktop Manager 回來用,不過官網上的 Windows 版本已經不提供最新版直接下載,取而代之的是讓你取得原始碼自行建置,建置的成功你就可以直接用最新版,否則你就需要付費加入他們的訂閱計畫 (USD 2.99/mo),才能直接拿到最新版。其實以不到新台幣 100 的價格,我覺得完全可以。但我還是手癢自己 Build 了一遍,結果花了 6 個小時才建置成功,雖然看似完全不值得花這時間,但藉此學習 Qt 與 CMake 基本概念也還不錯。本篇文章我就紀錄一下完整的建置過程。
環境準備
-
作業系統:Windows 10
-
安裝 Visual Studio 2015 Community with Updates
choco install visualstudio2015community -y
-
安裝 Qt 5.9
請安裝 Qt 5.9 的最新版,我今天安裝的版本為 Qt 5.9.6,請記得安裝過程中要勾選這個版本!
這個 Qt 軟體的安裝過程非常久,要耐心等候。
-
安裝 Win32 OpenSSL 1.0.X
請務必安裝 Win32 OpenSSL v1.0.2p (20MB Installer) 這個版本,也就是 Win32 + v1.0.x 且檔案大小最大的版本。
請安裝到預設的 C:\OpenSSL-Win32
資料夾。
-
安裝 CMake
-
取得 RedisDesktopManager 原始碼
git clone --recursive https://github.com/uglide/RedisDesktopManager.git -b 0.9 rdm && cd ./rdm
建置專案
-
開啟命令提示字元視窗 (Command Prompt)
-
進入專案原始碼的 3rdparty/qredisclient/3rdparty/qsshclient/3rdparty/libssh2
資料夾
-
使用 CMake 工具進行建置
這裡的重點在於 CRYPTO_BACKEND=WinCNG
參數,如果不加上這條,就無法建置成功,也無法產生必要的 libssh2.lib
檔案。
cmake -DCRYPTO_BACKEND=WinCNG -DCMAKE_BUILD_TYPE=RELEASE -DBUILD_SHARED_LIBS=ON -DCMAKE_INSTALL_PREFIX=./output --build .
cmake --build . --target install
mkdir build\src\release
copy output\lib\* build\src\release
-
開啟 Qt Creator 開發工具,並開啟 src/rdm.pro
專案檔
-
在 Qt Creator 中先選擇 Desktop Qt 5.9.6 MSVC2015 32bit > Release
設定檔,然後執行建置動作。( Ctrl-B
)
節錄 AppVeyor 的 CI 命令
由於 uglide/RedisDesktopManager 專案有跟 AppVeyor 整合,所以有全自動化的 CI 機制。我直接從 Log 中取得完整的 CI 指令,改天想找個時間自己嘗試一下,看能不能用 Azure DevOps Pipeline 整合出另一套完整的 CI 機制。
以下是完整的執行命令:
git clone -q --depth=5 https://github.com/uglide/RedisDesktopManager.git C:\projects\redisdesktopmanager
cd C:\projects\redisdesktopmanager
git fetch -q origin +refs/pull/4245/merge:
git checkout -qf FETCH_HEAD
git submodule update --init --recursive
set QTDIR=C:\Qt\5.9\msvc2015
set PATH=%QTDIR%\bin;%PATH%
echo %PATH%
call "C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\vcvarsall.bat"
powershell -command "iex ((New-Object Net.WebClient).DownloadString('https://raw.githubusercontent.com/appveyor/secure-file/master/install.ps1'))"
qmake -v
set SRCDIR=%cd%
cd ./3rdparty/qredisclient/3rdparty/qsshclient/3rdparty/libssh2
cmake -G "Visual Studio 14 2015" -DCRYPTO_BACKEND=OpenSSL -DOPENSSL_ROOT_DIR=C:\OpenSSL-Win32\ -DBUILD_EXAMPLES=off -DBUILD_TESTING=off -H. -Bbuild
cmake --build build --config "Release"
cd %SRCDIR%
python ./build/utils/set_version.py %APPVEYOR_BUILD_VERSION% > ./src/version.h
python ./build/utils/set_version.py %APPVEYOR_BUILD_VERSION% > ./3rdparty/crashreporter/src/version.h
cd ./3rdparty/crashreporter
qmake CONFIG+=release DESTDIR=%SRCDIR%/bin/windows/release
powershell -Command "(Get-Content Makefile.Release).replace('DEFINES =', 'DEFINES = -DAPP_NAME=\\\"RedisDesktopManager\\\" -DAPP_VERSION=\\\""%APPVEYOR_BUILD_VERSION%"\\\" -DCRASH_SERVER_URL=\\\"https://oops.redisdesktop.com/crash-report\\\"') " > Makefile.Release2
nmake -f Makefile.Release2
cd %SRCDIR%/src
qmake CONFIG+=release
nmake /S /NOLOGO release
cd %SRCDIR%
copy /y .\bin\windows\release\rdm.exe .\build\windows\installer\resources\rdm.exe
copy /y .\bin\windows\release\rdm.pdb .\build\windows\installer\resources\rdm.pdb
%SRCDIR%/3rdparty/gbreakpad/src/tools/windows/binaries/dump_syms .\bin\windows\release\rdm.pdb > .\build\windows\installer\resources\rdm.sym
cd build/windows/installer/resources/
windeployqt --no-angle --no-opengl-sw --no-compiler-runtime --no-translations --release --force --qmldir %SRCDIR%/src/qml rdm.exe
rmdir /S /Q .\platforminputcontexts
rmdir /S /Q .\qmltooling
rmdir /S /Q .\QtGraphicalEffects
del /Q .\imageformats\qtiff.dll
del /Q .\imageformats\qwebp.dll
cd %SRCDIR%
call "C:\\Program Files (x86)\\NSIS\\makensis.exe" /V1 /DVERSION=%APPVEYOR_BUILD_VERSION% ./build/windows/installer/installer.nsi
appveyor-tools\secure-file -encrypt build/windows/installer/redis-desktop-manager-%APPVEYOR_BUILD_VERSION%.exe -secret %secret% || exit 0
echo 'Windows build is used only for installer compilation. Skip tests.'
相關連結
- Redis
- Redis Desktop Manager 官網與文件
- 取得 Redis Desktop Manager 原始碼與建置文件
- 若可以接受舊版可以到 SourceForge.net 下載
- 其他文件