源碼編譯Redis Desktop Manager | 懶人屋

原文: 源碼編譯Redis Desktop Manager | 懶人屋

源碼編譯Redis Desktop Manager

文章背景

本文其實也是在博客的基礎上遷移過來的,在文章中也給出了怎麼去編譯的地址。Redis Desktop Manager這個軟件的做者雖然有訂閱版,可是他沒有取消源碼的下載,
只是源碼編譯起來有點複雜,對於不通常的用戶是沒法完成編譯的。本文的目的是讓用戶能本身完成編譯環境的安裝以及成功編譯軟件。
重要說明:本文不提供含SSH Tunnel的編譯方法,有須要的人請查閱本文參考資料。相信不少人都只是想要下載軟件對編譯一點興趣都沒有。因此本文中的關鍵信息基本一筆帶過,或者沒有寫。真的想要了解的歡迎評論探討。html

軟件環境

獲取源碼

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

準備工做

OpenSSL的網址:http://slproweb.com/products/Win32OpenSSL.html
怎麼安裝軟件我就不說了,相信能手動編譯的人都有這個能力安裝的redis

注意:QT安裝的時候除了要選擇Qt Creator外,還要選擇至少以下圖所示組件:shell

windows安裝QT

下載依賴包

根據官方文檔中的描述,要使用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

這個文件編譯須要使用到powershellreplace方法,而且編譯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,至於爲何以下圖所示:

Python依賴

注意:咱們值須要複製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:

SSH提示

錯誤修正

到上面呢基本能夠夠用了,可是應該有人發如今啓動的時候程序窗體會有以下圖所示的錯誤:

Python依賴

這是由於咱們沒有安裝相關的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

成品下載

考慮換到公衆號裏面去發送信息而後獲取下載地址,後面想一想算了仍是放出來吧。

特別感謝

相關文章
相關標籤/搜索