资讯详情

Robomongo(Robo 3T)源码构建实战:OpenSSL、Robomongo Shell 与 CMake 构建全流程(macOS / Linux)

📅 2026/9/25 17:52:29 | 华诺云谱 👁 阅读
Robomongo(Robo 3T)源码构建实战:OpenSSL、Robomongo Shell 与 CMake 构建全流程(macOS / Linux)
数据库客户端桌面应用【免费下载链接】robomongoNative cross-platform MongoDB management tool项目地址https://gitcode.com/gh_mirrors/ro/robomongo点击查看免费下载本文以仓库中的构建文档 docs/BuildingRobomongo.md 为主体完整讲解在 macOS 与 Linux 上从源码构建 Robomongo 的三步流程编译 OpenSSL 动态库、编译 Robomongo ShellMongoDB 的 fork内嵌数据库 Shell、通过 CMake 脚本编译 Robomongo 本体并安装、打包。读完后你能够独立完成构建并理解 cmake/FindMongoDB.cmake、cmake/FindOpenSSL.cmake 等 CMake 模块如何把这三者串联起来。需要说明适用前提该文档明确标注“适用于 1.0 及更早版本、对应 MongoDB 3.2”仓库中更新的构建说明见 docs/BuildRobo3TOnMacAndLinux.mdQt 5.12/5.9、OpenSSL 1.1.1/1.0.2、SCons 3.1.2 等。而当前仓库根 CMakeLists.txt 中的工程版本为 1.4.4显示名为 Robo 3T。两代文档的构建骨架一致本文按原文档MongoDB 3.2 时代的步骤成文并在相关小节标注当前仓库源码可佐证的实现细节。一、构建总览三条依赖链Robomongo 的源码构建存在严格的先后依赖OpenSSL1.0.1p编译出共享库libssl/libcrypto供 Robomongo 链接是 CMake 中find_package(OpenSSL REQUIRED)的查找目标Robomongo ShellMongoDB 3.2 fork用 SCons 构建mongo目标产生一整套目标文件object files供 Robomongo 直接以 objects 方式链接而非静态库Robomongo 本体通过bin/下的 CMake 前端脚本完成 configure、build、install、pack。其中 Shell 与 OpenSSL 的查找依赖同一个环境变量ROBOMONGO_CMAKE_PREFIX_PATH。从源码结构看cmake/FindOpenSSL.cmake 头部注释明确写着“It is assumed that OpenSSL has been built and path to OpenSSL build directory is added into system (environment) variableROBOMONGO_CMAKE_PREFIX_PATH”。二、前置依赖Prerequisites原文档给出的前置条件为四项版本要求与各自用途如下依赖版本要求用途CMake3.2 或更高驱动 Robomongo 的 CMake 构建当前仓库 CMakeLists.txt 要求cmake_minimum_required(VERSION 3.8.0)SCons2.4 或更高构建 Robomongo ShellMongoDB 的构建系统QtQt 5.7Robomongo 的 GUI 框架Core / Gui / Widgets 等模块OpenSSL1.0.1pSSL/TLS 支持需自行编译为共享库Qt 5.7 的安装示例原文档示例Example installation for MAC OSX and Ubuntu: Go to http://download.qt.io/archive/qt/5.7/5.7.0/ Download, run and install qt-opensource-mac-x64-clang-5.7.0.dmg (for MAC OSX) qt-opensource-linux-x64-5.7.0.run (for Linux) After successful installation you should have /path/to/qt-5.7.0/5.7/clang_64 (for MAC OSX) /path/to/qt-5.7.0/5.7/gcc_64 (for Linux) More information for installing on Ubuntu: https://wiki.qt.io/Install_Qt_5_on_Ubuntu安装完成后得到的clang_64/gcc_64目录就是后面要写入ROBOMONGO_CMAKE_PREFIX_PATH的第一个路径。Qt 具体用到哪些模块可以从根 CMakeLists.txt 的依赖探测看到Threading、Qt5Core、Qt5Gui、Qt5Widgets、Qt5PrintSupport、Qt5Network、Qt5Xml均为必需Qt5WebEngineWidgets仅非 Linux 平台需要if(NOT SYSTEM_LINUX)macOS 还额外要求Qt5MacExtras并把部署目标设为 10.14CMAKE_OSX_DEPLOYMENT_TARGET 10.14。此外工程强制启用 C17CMAKE_CXX_STANDARD 17。三、Step 1构建 OpenSSL 1.0.1pmacOS 步骤原文档命令Download openssl-1.0.1p (ftp://ftp.openssl.org/source/old/1.0.1/openssl-1.0.1p.tar.gz) tar -xvzf openssl-1.0.1p.tar.gz cd /Users/user/Downloads/openssl-1.0.1p ./Configure darwin64-x86_64-cc shared --openssldirrpath make (or sudo make) mkdir lib cp libssl.1.0.0.dylib libcrypto.1.0.0.dylib lib/辅助命令——从零开始重新构建// to start fresh build make cleanLinux 步骤原文档命令Download openssl-1.0.1p (ftp://ftp.openssl.org/source/old/1.0.1/openssl-1.0.1p.tar.gz) tar -xvzf openssl-1.0.1p.tar.gz cd /home/user/Downloads/openssl-1.0.1p ./config shared make mkdir lib cp libssl* libcrypto* lib/源码级补充为什么强调 shared 与 rpathcmake/FindOpenSSL.cmake 用find_path(OpenSSL_DIR include/openssl/ssl.h ...)定位 OpenSSL 根目录即在 OpenSSL 源码树内找include/openssl/ssl.h随后创建两个SHARED IMPORTED库目标ssl与crypto第 98–101 行。在非 Windows 分支中它期望的动态库文件名因平台而异macOS 为libssl.dylib/libcrypto.dylibLinux 为libssl.so/libcrypto.so第 113–126 行。因此./Configure ... shared中的shared与 Linux 下./config shared是硬性要求——找不到对应的动态库文件时该模块无法完成链接配置。macOS 命令中的--openssldirrpath则是为了让 OpenSSL 运行时配置路径使用rpath占位使库在打包后仍能按相对安装位置被加载而不是硬编码到构建机绝对路径。模块还会解析openssl/opensslv.h中的OPENSSL_VERSION_NUMBER十六进制编码来得到OPENSSL_VERSION第 57–91 行配置摘要里打印的版本即来源于此。四、Step 2构建 Robomongo ShellMongoDB fork4.1 克隆并检出对应分支原文档要求检出roboshell-v3.2分支对应 MongoDB 3.2$ git clone robomongo-shell 仓库地址 $ cd robomongo-shell $ git checkout roboshell-v3.24.2 设置 ROBOMONGO_CMAKE_PREFIX_PATH这是整个构建体系中最关键的变量必须指向三组目录Qt 5 SDK 位置Robomongo Shell 仓库根目录OpenSSL 源码树根目录。目录之间用分号;分隔不是冒号// MAC OSX example: $ export ROBOMONGO_CMAKE_PREFIX_PATH/path/to/qt-5.7.0/5.7/clang_64;/path/to/robomongo-shell;/path/to/openssl-1.0.1p // Ubuntu example: $ export ROBOMONGO_CMAKE_PREFIX_PATH/path/to/qt-5.7.0/5.7/gcc_64;/path/to/robomongo-shell;/path/to/openssl-1.0.1p从源码结构看这个变量最终被bin/configure以-D CMAKE_PREFIX_PATH$PREFIX_PATH的形式传给 CMakePREFIX_PATH$ROBOMONGO_CMAKE_PREFIX_PATH在 bin/common/setup 中于是 CMake 的find_path会在这三个目录下分别找到 Shell 根目录通过src/mongo/config.h.in见 cmake/FindMongoDB.cmake#L18-L21与 OpenSSL 根目录通过include/openssl/ssl.hQt 模块则由同一条CMAKE_PREFIX_PATH定位。4.3 构建 Shell$ bin/buildShell 侧的bin/build底层执行 SCons。更完整的 Shell 构建说明含 SCons 高级用法见同目录文档 docs/BuildingMongoDB.md其中bin/build实际执行的命令为$ scons mongo -j8 --release --osx-version-min10.9--osx-version-min参数仅 macOS 需要调试模式构建为scons mongo -j8 --dbg清理构建可用scons -c mongorelease或scons -c --dbg mongodebug。4.4 为什么是 objects 而不是静态库cmake/mongodb/README.md 解释了 Robomongo 与 Shell 的链接方式由于 MongoDB 的 SCons 构建在 release 模式下只支持 object 链接模型“the only linking model that works across all of our platforms”release 构建无法直接产出可链接的静态库scons mongo --release --link-modelstatic不可用因此 Robomongo 直接链接 Shell 编译出的目标文件。这些目标文件清单存放在cmake/mongodb/目录下按“平台-构建类型”命名例如 cmake/mongodb/linux-release.objects、cmake/mongodb/macosx-debug.objects 等。cmake/FindMongoDB.cmake#L24-L30 按BUILD_RELEASE/BUILD_DEBUG选择build/opt或build/debug作为 Shell 的构建目录再读取对应的.objects文件把相对路径批量转换为绝对路径第 86–111 行。另外两处源码细节值得注意链接参数找到 Shell 后MongoDB_LIBS会被包上--whole-archive/--start-group ... --end-group/--no-whole-archive并追加dl等系统库保证所有 object 中的符号不被动摇strip掉cmake/FindMongoDB.cmake#L142-L150Windows 长路径 workaround若MongoDB_OBJECTS环境变量存在则用它覆盖对象目录注释说明这是为规避长路径触发的 LNK1170 错误cmake/FindMongoDB.cmake#L97-L106——这印证了原文档中“Shell 路径不要太长”的隐含要求。五、Step 3构建 Robomongo 本体# 获取源码 $ git clone robomongo 仓库地址 $ cd robomongo # 配置 $ bin/configure # 编译 $ bin/build # 运行 $ bin/runbin/脚本是 CMake 的 Bash 前端bin/README.md 把bin/下的脚本定义为 “Bash fronted for CMake”并同样要求先设置ROBOMONGO_CMAKE_PREFIX_PATH。逐个看当前仓库脚本实现bin/configuresource bin/common/setup未带debug参数时默认 ReleaseBUILD_DIRbuild/releaseINSTALL_PREFIXbuild/release/install随后在构建目录中执行cmake -D CMAKE_PREFIX_PATH$PREFIX_PATH -D CMAKE_BUILD_TYPE$BUILD_TYPE -D CMAKE_INSTALL_PREFIX$INSTALL_PREFIX [额外参数] 项目根目录bin/build执行cmake --build . [额外参数] -- -j8即 8 并行度bin/install执行cmake --build . --target install/strip把产物安装到build/release/install与原文档描述的目录一致bin/pack执行cmake --build . --target package在build/release/package目录生成对应操作系统的安装包bin/clean直接rm -rf build/release或build/debug即原文档所述“清理构建产物以便从头开始构建”bin/run提示需先执行 installmacOS 上启动install/Robo 3T.appLinux 上启动install/bin/robo3t。由此可知原文档中“Install Robomongo tobuild/release/install”“Create package ... inbuild/release/package”这两个目录约定正是由bin/common/setup中INSTALL_PREFIX、PACK_PREFIX的定义决定的。若需 Debug 构建按仓库脚本约定在每个命令后追加debug参数如bin/configure debug、bin/build debug构建目录随之切换为build/debug——这也与 cmake/FindMongoDB.cmake#L24-L30 中按BUILD_DEBUG选择build/debug的逻辑相呼应。配置失败时的排查入口CMake 找不到 Shell 时会给出明确提示cmake/FindMongoDB.cmake#L132-L137Could not find Robomongo Shell (MongoDB fork). Make sure that CMAKE_PREFIX_PATH points to Robomongo Shell project root.遇到该错误时按顺序检查ROBOMONGO_CMAKE_PREFIX_PATH是否已 export、Shell 根目录下是否存在src/mongo/config.h.in、Shell 是否已用bin/buildscons mongo构建出build/opt或build/debug产物。六、平台相关的已知坑原文档 Important Notes这两条来自原文档的“Important Notes”属于实战中最常见的 configure 失败场景Ubuntu 16.04bin/configure步骤可能失败安装mesa-common-dev包可以解决CentOSbin/configure步骤可能因failed to find gl/gl.h失败需安装$ sudo yum install mesa-libGL $ sudo yum install mesa-libGL-devel从源码结构看Qt5Gui/Qt5Widgets 模块的探测会触发 OpenGL 头文件检查这正是上述两条报错的共同根源。七、构建流程小结与源码索引把原文档三步流程映射到仓库中的关键实现方便按需深入原文档步骤仓库中的实现证据前置CMake / SCons / Qt / OpenSSLCMakeLists.txt#L29-L40依赖探测、docs/BuildingMongoDB.mdSCons 构建 ShellStep 1构建 OpenSSLcmake/FindOpenSSL.cmake目录定位、版本解析、imported 目标ssl/cryptoStep 2构建 Shell 设置ROBOMONGO_CMAKE_PREFIX_PATHcmake/FindMongoDB.cmake、cmake/mongodb/README.md、cmake/mongodb/*.objects目标文件清单Step 3bin/configure/bin/build/bin/runbin/configure、bin/build、bin/run、bin/common/setup辅助bin/clean/bin/install/bin/packbin/clean、bin/install、bin/pack一句话总结OpenSSL 与 Robomongo Shell 先各自独立编译好ROBOMONGO_CMAKE_PREFIX_PATH用分号串起 Qt、Shell、OpenSSL 三个根目录bin/configure把它转成CMAKE_PREFIX_PATH交给 CMakeFindMongoDB.cmake与FindOpenSSL.cmake分别完成 Shell 目标文件清单和动态库的定位最终由bin/build8 并行、bin/install、bin/pack完成编译、安装与打包。赞分享数据库客户端桌面应用【免费下载链接】robomongoNative cross-platform MongoDB management tool项目地址https://gitcode.com/gh_mirrors/ro/robomongo点击查看免费下载相关推荐Robo 3T 在 macOS 与 Linux 上的源码构建指南从 OpenSSL、Robo 3T Shell 到 CMake 构建全链路Robo 3T 在 macOS 与 Linux 上的源码构建指南从 OpenSSL、Robo 3T Shell 到 CMake 构建全链路 Robo 3T仓数据库客户端桌面应用Robomongo Shell 源码构建指南Scons 构建流程及其与 Robomongo CMake 工程的对接原理Robomongo Shell 源码构建指南Scons 构建流程及其与 Robomongo CMake 工程的对接原理 本文围绕 Robomongo 构建流程数据库客户端桌面应用Robo 3T (robomongo) Windows 源码构建指南工具链、Shell 编译与 LNK1170 排查Robo 3T robomongo Windows 源码构建指南工具链、Shell 编译与 LNK1170 排查 本文基于仓库文档 docs/BuildRob数据库客户端桌面应用上一篇Univer 遥测服务接入指南基于 univerjs/telemetry 的 ITelemetryService 接口实现与注册下一篇WTF Solidity 极简入门Merkle Tree 与 NFT 白名单发放实战创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
📝

华诺云谱内容团队

资深建站顾问 · 行业研究员

10年+企业数字化服务经验,专注智能建站、SEO优化与品牌营销,持续输出建站技巧、行业洞察与营销干货,已帮助5000+企业实现数字化增长。

你可能需要的服务

订阅华诺云谱资讯周报

每周一封,精选建站技巧、SEO与营销干货,直达邮箱。已有 8,000+ 企业主订阅,助你少走弯路。

↑