精美文章轉載:html
版權聲明:本文做者爲「Kany.Wang」,本博客全部文章除特別聲明外,均採用 CC BY-NC-SA 3.0 許可協議。轉載請註明出處!
原文連接:https://kany.me/2019/10/10/compile-redis-desktop-manager/python
https://pan.baidu.com/s/1tpjOUgyhni1aZWi6sQklWQgit
百度雲密碼:k7kmgithub
源碼編譯Redis Desktop Manager 2.3k 字 10 分鐘 2019-10-10
文章背景
本文其實也是在博客的基礎上遷移過來的,在文章中也給出了怎麼去編譯的地址。Redis Desktop Manager這個軟件的做者雖然有訂閱版,可是他沒有取消源碼的下載,
只是源碼編譯起來有點複雜,對於不通常的用戶是沒法完成編譯的。本文的目的是讓用戶能本身完成編譯環境的安裝以及成功編譯軟件。
重要說明:本文不提供含SSH Tunnel的編譯方法,有須要的人請查閱本文參考資料。相信不少人都只是想要下載軟件對編譯一點興趣都沒有。因此本文中的關鍵信息基本一筆帶過,或者沒有寫。真的想要了解的歡迎評論探討。web
軟件環境
OS:win10 1903
OS:macOS Mojave 10.14.4
Xcode:10.1
QT:5.9.8 文件大小 3G,請認真對待
Source:rdm 2019.3
獲取源碼
Windows下:redis
git clone --recursive https://github.com/uglide/RedisDesktopManager.git E:\rdm2019
cd E:\rdm2019
macOS下:shell
# 到下載目錄
cd ~/Downloads
git clone --recursive https://github.com/uglide/RedisDesktopManager.git rdm2019
cd rdm2019
設置版本
windows下:windows
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下:架構
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下
軟件安裝能夠根據我的習慣,不強制要求。app
準備工做
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
怎麼安裝軟件我就不說了,相信能手動編譯的人都有這個能力安裝的
注意:QT安裝的時候除了要選擇Qt Creator外,還要選擇至少以下圖所示組件:
下載依賴包
根據官方文檔中的描述,要使用Nuget下載zlib-msvc14-x64.1.2.11.7795
cd E:\rdm2019
cd 3rdparty/
nuget install zlib-msvc14-x64 -Version 1.2.11.7795
配置SSL的路徑
安裝好OpenSSL以後可能要修改路徑,以前提到我我的是安裝在D:\Tools\OpenSSL-Win64下的。
# 打開 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
成品下載
考慮換到公衆號裏面去發送信息而後獲取下載地址,後面想一想算了仍是放出來吧。
百度雲密碼:k7km
特別感謝
2019-08-30 感謝*純夫童鞋的打賞,感謝確定。
參考資料
官方文檔
Macbook編譯Redis Desktop Manager源碼步驟及問題解決
MAC 下編譯 RedisDesktopMmanager 最新版
解決 「dyld: Library not loaded: 」 錯誤
cmake構建時指定編譯器架構
WIN10+QT5.9+VS2015編譯RedisDesktopManager
本文做者:Kany.Wang
本文連接:https://kany.me/2019/10/10/compile-redis-desktop-manager/
版權聲明:本博客全部文章除特別聲明外,均採用 CC BY-NC-SA 3.0 許可協議。轉載請註明出處!
————————————————版權聲明:本文做者爲「Kany.Wang」,本博客全部文章除特別聲明外,均採用 CC BY-NC-SA 3.0 許可協議。轉載請註明出處!原文連接:https://kany.me/2019/10/10/compile-redis-desktop-manager/