文章背景
本文其實也是在博客的基礎上遷移過來的,在文章中也給出了怎麼去編譯的地址。Redis Desktop Manager這個軟件的做者雖然有訂閱版,可是他沒有取消源碼的下載,
只是源碼編譯起來有點複雜,對於不通常的用戶是沒法完成編譯的。本文的目的是讓用戶能本身完成編譯環境的安裝以及成功編譯軟件。
重要說明:本文不提供含SSH Tunnel的編譯方法,有須要的人請查閱本文參考資料。相信不少人都只是想要下載軟件對編譯一點興趣都沒有。因此本文中的關鍵信息基本一筆帶過,或者沒有寫。真的想要了解的歡迎評論探討。html
軟件環境
- OS:win10 1903
- OS:macOS Mojave 10.14.4
- Xcode:10.1
- QT:5.9.8 文件大小 3G,請認真對待
- Source:rdm 2019.3
獲取源碼
Windows下:python
git clone --recursive https://github.com/uglide/RedisDesktopManager.git E:\rdm2019 cd E:\rdm2019
macOS下:linux
# 到下載目錄 cd ~/Downloads git clone --recursive https://github.com/uglide/RedisDesktopManager.git rdm2019 cd rdm2019
設置版本
windows下:git
cd E:\rdm2019 set VERSION=2019.4.0 python ./build/utils/set_version.py %VERSION% > ./src/version.h python ./build/utils/set_version.py %VERSION% > ./3rdparty/crashreporter/src/version.h eg. D:\Tools\Python37\python.exe ./build/utils/set_version.py 2019.4.0 > ./src/version.h D:\Tools\Python37\python.exe ./build/utils/set_version.py 2019.4.0 > ./3rdparty/crashreporter/src/version.h
macOS下:github
cd ~/Downloads/rdm2019 python ./build/utils/set_version.py 2019.4.0 > ./src/version.h python ./build/utils/set_version.py 2019.4.0 > ./3rdparty/crashreporter/src/version.h
Win下環境準備
windows下的軟件手動安裝的要多點,不像macOS一個命令能夠搞定。我我的是將QT、CMake、NSIS、Python三、OpenSSL等文件安裝到D:\Tools或者E:\Tools下
軟件安裝能夠根據我的習慣,不強制要求。web
準備工做
- Visual Studio 2017 Community Edition
- QT:到 http://mirrors.ustc.edu.cn/qtproject/archive/qt/5.9/ 下載最新到 Qt 5.9 版本,一直下一步就行,大約半個小時左右。
- CMake:到https://cmake.org/download/ 下載 32 位的版本,安裝時注意勾選添加到 PATH
- NSIS:安裝打包工具 http://nsis.sourceforge.net/Download 注意下載3的版本
- Python3:到 https://www.python.org/downloads/ 下載安裝 Python 3.7.x
- OpenSSL:下載並安裝Win 64 OpenSSL 1.0.x,文中用到的是Win64OpenSSL-1_0_2t
- Nuget:此文件用來下載一個依賴包,下載地址
OpenSSL的網址:http://slproweb.com/products/Win32OpenSSL.html
怎麼安裝軟件我就不說了,相信能手動編譯的人都有這個能力安裝的redis
注意:QT安裝的時候除了要選擇Qt Creator外,還要選擇至少以下圖所示組件:shell
下載依賴包
根據官方文檔中的描述,要使用Nuget下載zlib-msvc14-x64.1.2.11.7795macos
cd E:\rdm2019 cd 3rdparty/ nuget install zlib-msvc14-x64 -Version 1.2.11.7795
配置SSL的路徑
安裝好OpenSSL以後可能要修改路徑,以前提到我我的是安裝在D:\Tools\OpenSSL-Win64下的。windows
# 打開 3rdparty\3rdparty.pri # 修改 OPENSSL_LIB_PATH = C:\OpenSSL-Win64\lib\VC 爲真實的路徑便可 OPENSSL_LIB_PATH = D:\Tools\OpenSSL-Win64\lib\VC
安裝Python3
官方文檔中提醒各位是安裝在C:\Python37-x64,可能有部分小夥伴已經安裝好了Python。咱們能夠修改一個文件便可。
# 打開 3rdparty\pyotherside.pri # 修改Python的路徑爲真實路徑便可: QMAKE_LIBS += -LD:\Tools\Python37\libs -lpython37 INCLUDEPATH += D:\Tools\Python37\include\
編譯crashreporter
這個文件編譯須要使用到powershell的replace方法,而且編譯crashreporter編譯時是必須存在的,否則沒法編譯
使用「適用於 VS 2017 的 x86_x64 兼容工具命令提示」進行操做:
# 進入文件夾 cd E:\rdm2019\3rdparty\crashreporter # 設定編譯環境 "E:\Tools\Qt5.9.8\5.9.8\msvc2017_64\bin\qmake.exe" CONFIG+=release DESTDIR=E:\rdm2019\bin\windows\release # 配置編譯腳本的參數 powershell -Command "(Get-Content Makefile.Release).replace('DEFINES =','DEFINES = -DAPP_NAME=\\\"RedisDesktopManager\\\" -DAPP_VERSION=\\\""%VERSION%"\\\" -DCRASH_SERVER_URL=\\\"https://oops.redisdesktop.com/crash-report\\\"')" > Makefile.Release2 eg. powershell -Command "(Get-Content Makefile.Release).replace('DEFINES =','DEFINES = -DAPP_NAME=\\\"RedisDesktopManager\\\" -DAPP_VERSION=\\\""2019.4.0"\\\" -DCRASH_SERVER_URL=\\\"https://oops.redisdesktop.com/crash-report\\\"')" > Makefile.Release2 # 這個地方必定要使用VS的本機命令行工具提示符 nmake -f Makefile.Release2
修改 hiredis
因爲win下的軟件和其餘的平臺的C的語法區別須要合併補丁
cd E:\rdm2019\3rdparty\qredisclient\3rdparty\hiredis git apply ../hiredis-win.patch
編譯主程序
Qt 編譯
打開Qt Creator,打開 E:\rdm2019\src\rdm.pro
選擇 「Deaktop Qt 5.9.6 MSVC2017 64bit」,構建選擇 release,點擊構建項目。
構建安裝程序
這裏主要是用來處理程序是依賴關係,否則只有主程序是不能運行的。
cd E:\rdm2019 copy /y .\bin\windows\release\crashreporter.exe .\build\windows\installer\resources\crashreporter.exe copy /y .\bin\windows\release\rdm.exe .\build\windows\installer\resources\rdm.exe # 切換目錄 cd E:\rdm2019\build\windows\installer\resources # 優先選擇這個 E:\Tools\Qt5.9.8\5.9.8\msvc2017_64\bin\windeployqt --no-angle --no-opengl-sw --no-compiler-runtime --no-translations --release --force --qmldir E:\rdm2019\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
驗證編譯程序
因爲做者在2019.4.0的版本以後加入了Python,因此這個地方咱們還要下載一個Python的運行環境python-3.7.4-embed-amd64.zip,至於爲何以下圖所示:
注意:咱們值須要複製python37.zip、python37.dll這兩個文件便可。安裝了Python環境的電腦機器上不會報錯的,可是也不會啓動。建議在虛擬機上或者另外的電腦測試。
打包發佈程序
通過上面的步驟以後,如今能夠順利發佈程序給其餘的小夥伴了,開不開心?
#切換目錄 cd E:\rdm2019 # 打包安裝文件 call "E:\\Tools\\NSIS\\makensis.exe" /V1 /DVERSION=%VERSION% ./build/windows/installer/installer.nsi eg. call "E:\\Tools\\NSIS\\makensis.exe" /V1 /DVERSION=2019.4.0 ./build/windows/installer/installer.nsi
注意:本次打包出來的程序不支持SSH:
錯誤修正
到上面呢基本能夠夠用了,可是應該有人發如今啓動的時候程序窗體會有以下圖所示的錯誤:
這是由於咱們沒有安裝相關的Python依賴包,安裝的方式在官方文檔中已經給出了。
# 切換目錄 cd E:\rdm2019 # 下載依賴 pip install -r src/py/requirements.txt
複製E:\Tools\Python3\Lib文件夾,一番操做以後保留以下圖所示的文件,記住將src/py下的文件也複製過去:
Lib
└─site-packages
├─cbor
├─formatters
├─msgpack
├─rdb
├─rdbtools
│ ├─cli
│ └─templates
└─redis
生成最後的pyc文件,並刪除pycache和py的源碼文件。使用命令以下:
# 切換到目錄中 cd Lib/site-packages/ # 編譯pyc python -m compileall -b .
至此:E:\rdm2019\build\windows\installer\resources文件夾下就有一個Lib目錄,最後運行就沒有錯誤啦。相應的格式化功能都有,只是和做者的不同。
Mac下環境準備
macOS下我我的感受相對簡單一些,安裝好QT 5.9.x、XCode以後基本上就能夠命令搞定了
準備工做
- HomeBrew
- 使用HomeBrew 安裝 openssl 和 cmake
注意:QT安裝的時候除了要選擇Qt Creator和Charts module之外你還要選擇 Mac,這是一個注意點。
編譯 crashreporter
cd 3rdparty/crashreporter && ~/Qt5.9.8/5.9.8/clang_64/bin/qmake DESTDIR=./../../bin/osx/release vi Makefile # 修改 DEFINES = -DQT_NO_DEBUG -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_NETWORK_LIB -DQT_CORE_LIB # 爲: DEFINES = -DAPP_NAME=\"RedisDesktopManager\" -DAPP_VERSION=\"%VERSION%\" -DCRASH_SERVER_URL=\"https://oops.redisdesktop.com/crash-report\" -DQT_NO_DEBUG -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_NETWORK_LIB -DQT_CORE_LIB -DNDEBUG # eg. DEFINES = -DAPP_NAME=\"RedisDesktopManager\" -DAPP_VERSION=\"2019.4.0\" -DCRASH_SERVER_URL=\"https://oops.redisdesktop.com/crash-report\" -DQT_NO_DEBUG -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_NETWORK_LIB -DQT_CORE_LIB -DNDEBUG # 編譯 make -s -j 8 # 複製文件到最終目錄 # mkdir -p ../../bin/osx/release && mv bin/crashreporter ../../bin/osx/release # 因爲已經指定了編譯的目錄,不會生生成在當前目錄,因此不執行上面的語句
編譯主程序
注意:這個地方必定要補上src/configure、build/common_functions
./configure && ~/Qt5.9.8/5.9.8/clang_64/bin/qmake CONFIG-=debug && make -s -j 8 && cd .. # 切換目錄 cd ./bin/osx/release # 添加QT依賴 ~/Qt5.9.8/5.9.8/clang_64/bin/macdeployqt rdm.app -qmldir=../../../src/qml # 刪除非沒必要要的文件(若是已經作好了Python.framework就不須要了) rm -rf rdm.app/Contents/Frameworks/Python.framework/Versions/3.7/Headers/ rm -rf rdm.app/Contents/Frameworks/Python.framework/Versions/3.7/Resources/ rm -rf rdm.app/Contents/Frameworks/Python.framework/Versions/3.7/bin/ rm -rf rdm.app/Contents/Frameworks/Python.framework/Versions/3.7/include/ rm -rf rdm.app/Contents/Frameworks/Python.framework/Versions/3.7/share/ # 修改文件對系統環境的依賴 # 查看依賴 otool -L rdm.app/Contents/Frameworks/libssl.1.0.0.dylib # 替換依賴 install_name_tool -change /usr/local/Cellar/openssl/1.0.2r/lib/libcrypto.1.0.0.dylib @executable_path/../Frameworks/libcrypto.1.0.0.dylib rdm.app/Contents/Frameworks/libssl.1.0.0.dylib # 查看依賴 otool -L rdm.app/Contents/MacOS/rdm # 替換依賴 install_name_tool -change /usr/local/opt/python/Frameworks/Python.framework/Versions/3.7/Python @executable_path/../Frameworks/Python.framework/Versions/3.7/Python rdm.app/Contents/MacOS/rdm
成品下載
考慮換到公衆號裏面去發送信息而後獲取下載地址,後面想一想算了仍是放出來吧。
特別感謝
- 2019-08-30 感謝*純夫童鞋的打賞,感謝確定。
參考資料
- 官方文檔
- Macbook編譯Redis Desktop Manager源碼步驟及問題解決
- MAC 下編譯 RedisDesktopMmanager 最新版
- 解決 「dyld: Library not loaded: 」 錯誤
- cmake構建時指定編譯器架構
- WIN10+QT5.9+VS2015編譯RedisDesktopManager
- 本文連接:https://kany.me/2019/10/10/compile-redis-desktop-manager/
- 版權聲明:本博客全部文章除特別聲明外,均採用 CC BY-NC-SA 3.0 許可協議。轉載請註明出處!