• 源码编译Redis Desktop Manager ---(转载)


    精美文章转载:

    版权声明:本文作者为「Kany.Wang」,本博客所有文章除特别声明外,均采用 CC BY-NC-SA 3.0 许可协议。转载请注明出处!
    原文链接:https://kany.me/2019/10/10/compile-redis-desktop-manager/

    https://pan.baidu.com/s/1tpjOUgyhni1aZWi6sQklWQ

    百度云密码:k7km

    源码编译Redis Desktop Manager 2.3k  字    10  分钟    2019-10-10
    文章背景
    本文其实也是在博客的基础上迁移过来的,在文章中也给出了怎么去编译的地址。Redis Desktop Manager这个软件的作者虽然有订阅版,但是他没有取消源码的下载,
    只是源码编译起来有点复杂,对于不一般的用户是无法完成编译的。本文的目的是让用户能自己完成编译环境的安装以及成功编译软件。
    重要说明:本文不提供含SSH Tunnel的编译方法,有需要的人请查阅本文参考资料。相信很多人都只是想要下载软件对编译一点兴趣都没有。所以本文中的关键信息基本一笔带过,或者没有写。真的想要了解的欢迎评论探讨。

    软件环境
    OS:win10 1903
    OS:macOS Mojave 10.14.4
    Xcode:10.1
    QT:5.9.8 文件大小 3G,请认真对待
    Source:rdm 2019.3
    获取源码
    Windows下:

    git clone --recursive https://github.com/uglide/RedisDesktopManager.git E: dm2019
    cd E: dm2019
    macOS下:

    # 到下载目录
    cd ~/Downloads
    git clone --recursive https://github.com/uglide/RedisDesktopManager.git rdm2019
    cd rdm2019
    设置版本
    windows下:

    cd E: dm2019
    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:ToolsPython37python.exe ./build/utils/set_version.py 2019.4.0 > ./src/version.h
    D:ToolsPython37python.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、Python3、OpenSSL等文件安装到D:Tools或者E:Tools下
    软件安装可以根据个人习惯,不强制要求。

    准备工作
    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: dm2019
    cd 3rdparty/
    nuget install zlib-msvc14-x64 -Version 1.2.11.7795
    配置SSL的路径
    安装好OpenSSL之后可能要修改路径,之前提到我个人是安装在D:ToolsOpenSSL-Win64下的。

    # 打开 3rdparty3rdparty.pri
    # 修改 OPENSSL_LIB_PATH = C:OpenSSL-Win64libVC 为真实的路径即可
    OPENSSL_LIB_PATH = D:ToolsOpenSSL-Win64libVC
    安装Python3
    官方文档中提醒各位是安装在C:Python37-x64,可能有部分小伙伴已经安装好了Python。我们可以修改一个文件即可。

    # 打开 3rdpartypyotherside.pri
    # 修改Python的路径为真实路径即可:
    QMAKE_LIBS += -LD:ToolsPython37libs -lpython37
    INCLUDEPATH += D:ToolsPython37include
    编译crashreporter
    这个文件编译需要使用到powershell的replace方法,并且编译crashreporter编译时是必须存在的,不然无法编译
    使用“适用于 VS 2017 的 x86_x64 兼容工具命令提示”进行操作:

    # 进入文件夹
    cd E: dm20193rdpartycrashreporter
    # 设定编译环境
    "E:ToolsQt5.9.85.9.8msvc2017_64inqmake.exe" CONFIG+=release DESTDIR=E: dm2019inwindows elease

    # 配置编译脚本的参数
    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: dm20193rdpartyqredisclient3rdpartyhiredis
    git apply ../hiredis-win.patch
    编译主程序
    Qt 编译
    打开Qt Creator,打开 E: dm2019src dm.pro
    选择 “Deaktop Qt 5.9.6 MSVC2017 64bit”,构建选择 release,点击构建项目。

    构建安装程序
    这里主要是用来处理程序是依赖关系,不然只有主程序是不能运行的。

    cd E: dm2019
    copy /y .inwindows eleasecrashreporter.exe .uildwindowsinstaller esourcescrashreporter.exe
    copy /y .inwindows elease dm.exe .uildwindowsinstaller esources dm.exe

    # 切换目录
    cd E: dm2019uildwindowsinstaller esources
    # 优先选择这个
    E:ToolsQt5.9.85.9.8msvc2017_64inwindeployqt --no-angle --no-opengl-sw --no-compiler-runtime --no-translations --release --force --qmldir E: dm2019srcqml rdm.exe
    #这个好像有垃圾文件


    # 我也不知道为什么删除
    rmdir /S /Q .platforminputcontexts
    rmdir /S /Q .qmltooling
    rmdir /S /Q .QtGraphicalEffects
    del /Q .imageformatsqtiff.dll
    del /Q .imageformatsqwebp.dll
    验证编译程序
    由于作者在2019.4.0的版本之后加入了Python,所以这个地方我们还要下载一个Python的运行环境python-3.7.4-embed-amd64.zip,至于为什么如下图所示:

    注意:我们值需要复制python37.zip、python37.dll这两个文件即可。安装了Python环境的电脑机器上不会报错的,但是也不会启动。建议在虚拟机上或者另外的电脑测试。

    打包发布程序
    经过上面的步骤之后,现在可以顺利发布程序给其他的小伙伴了,开不开心?

    #切换目录
    cd E: dm2019
    # 打包安装文件
    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: dm2019
    # 下载依赖
    pip install -r src/py/requirements.txt
    复制E:ToolsPython3Lib文件夹,一番操作之后保留如下图所示的文件,记住将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: dm2019uildwindowsinstaller esources文件夹下就有一个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/

  • 相关阅读:
    ActiveReports打印的问题
    HTML高级应用
    一些常用的asp.net技巧焦点篇
    数据库操作
    [ASP.NET]在后台引用JavaScript
    点击TextBox复制其中内容
    VB.Net基本语句(推荐)
    ADO 对象
    控件不获得焦点
    32款网站优化工具
  • 原文地址:https://www.cnblogs.com/micro-chen/p/11844676.html
Copyright © 2020-2023  润新知