Windows

Ruby 支持 Windows 上的一些原生构建平台。

使用 Mingw 和 UCRT 构建 Ruby

最简单的构建环境就是标准的 RubyInstaller-Devkit 安装和 git-for-windows。你可能喜欢使用 VSCode 作为编辑器。

构建示例

Ruby 核心开发可以在 Windows cmd 中进行,例如:

ridk install
ridk enable ucrt64

pacman -S --needed %MINGW_PACKAGE_PREFIX%-openssl %MINGW_PACKAGE_PREFIX%-libyaml %MINGW_PACKAGE_PREFIX%-libffi

mkdir c:\work\ruby
cd /d c:\work\ruby

git clone https://github.com/ruby/ruby src

sh ./src/autogen.sh

mkdir build
cd build
sh ../src/configure -C --disable-install-doc
make

或者在 MSYS2 bash 中进行,例如:

ridk install
ridk enable ucrt64
bash

pacman -S --needed $MINGW_PACKAGE_PREFIX-openssl $MINGW_PACKAGE_PREFIX-libyaml $MINGW_PACKAGE_PREFIX-libffi

mkdir /c/work/ruby
cd /c/work/ruby

git clone https://github.com/ruby/ruby src

./src/autogen.sh
cd build
../src/configure -C --disable-install-doc
make

如果你通过其他包管理器(如 scoop)拥有其他 MSYS2 环境,你需要指定 $MINGW_PACKAGE_PREFIXmingw-w64-ucrt-x86_64。并且你需要向 configure 命令添加 --with-opt-dir 选项,例如:

sh ../../ruby/configure -C --disable-install-doc --with-opt-dir=C:\Users\username\scoop\apps\msys2\current\ucrt64

使用 Visual C++ 构建 Ruby

Requirement

  1. Windows 10/Windows Server 2016 或更高版本。

  2. Visual C++ 14.0 (2015) 或更高版本。

    注意 如果你想构建 x64 版本,请使用原生的 x64 编译器。

    最低要求如下:* VS 2017/2019/2022 版本构建工具中的 VC++/MSVC。* Windows 10/11 SDK

    你可以使用 winget 安装 Visual Studio 构建工具。win32\install-buildtools.cmd 是一个批处理文件,用于安装除 IDE 等之外的最低要求。

  3. 请设置环境变量 INCLUDELIBPATH 以便从命令行正确运行所需的命令。这些通常由 vsdevcmd.batvcvarall*.bat 正确设置。你可以运行以下命令在你的命令行中设置它们。

    构建原生版本

    cmd /k win32\vssetup.cmd

    交叉构建 arm64 二进制文件

    cmd /k win32\vssetup.cmd -arch=arm64

    交叉构建 x64 二进制文件

    cmd /k win32\vssetup.cmd -arch=x64

    这个批处理文件是 vsdevcmd.bat 的一个包装器,选项会原样传递给它。有关其他命令行选项,请运行 win32\vssetup.cmd -help

    注意 构建 Ruby 需要以下命令。

    • nmake

    • cl

    • ml

    • lib

    • dumpbin

  4. 如果你想从 GIT 源码构建,需要以下命令。

    • git

    • ruby 3.1 或更高版本

    你可以使用 scoop 来安装它们,例如:

    scoop install git ruby
    

    Windows 版 git 配置了 autocrlftrue。Ruby 测试套件可能会在 autocrlf 设置为 true 时失败。你可以将其设置为 false,例如:

    git config --global core.autocrlf false
  5. 你需要在 Ruby 仓库目录中使用 vcpkg 安装所需的库,例如:

    vcpkg --triplet x64-windows install
  6. 启用你命令行的命令扩展。这是 cmd.exe 的默认行为。如果你想显式启用它,请使用 /E:ON 选项运行 cmd.exe

如何编译和安装

  1. 在你的构建目录中执行 win32\configure.bat。你可以将目标平台指定为一个参数。例如,运行 configure --target=i686-mswin32。你也可以指定安装目录。例如,运行 configure --prefix=<install_directory>。安装目录的默认值为 /usr

  2. 如果你想追加到可执行文件和 DLL 文件名,请指定 --program-prefix--program-suffix,例如 win32\configure.bat --program-suffix=-$(MAJOR)$(MINOR)

    此外,--install-name--so-name 选项分别指定可执行文件和 DLL 文件的确切基本名称,例如 win32\configure.bat --install-name=$(RUBY_BASE_NAME)-$(MAJOR)$(MINOR)

    默认情况下,没有控制台窗口的可执行文件的名称是根据上面指定的 RUBY_INSTALL_NAME 生成的,方法是将 ruby 替换为 rubyw。如果你想进一步修改它,请直接在 Makefile 中修改 RUBYW_INSTALL_NAME

  3. 你需要使用 --with-opt-dir 选项指定 vcpkg 目录,例如 win32\configure.bat --with-opt-dir=C:/vcpkg_installed/x64-windows

  4. 如果你是从 GIT 源码构建,请运行 nmake up

  5. 运行 nmake

  6. 如果你需要将 vcpkg 安装的库(如 libssl-3-x64.dll)复制到构建目录,请以管理员权限运行 nmake prepare-vcpkg

  7. 运行 nmake check

  8. 运行 nmake install

构建示例

Bug

不能使用包含任何空格字符的路径名作为 Ruby 源码目录,这个限制源于 NMAKE!INCLUDE 指令的行为。

你可以将 Ruby 构建在任何目录中,包括源码目录,但排除源码目录中的 win32 目录。这是 NMAKE 路径搜索方法的一个限制。

依赖管理

Ruby 在 mswin 平台上使用 vcpkg 来管理依赖项。

你可以在构建目录下更新和安装它,例如:

nmake update-vcpkg # Update baseline version of vcpkg
nmake install-vcpkg # Install vcpkg from build directory

图标

构建目录中的任何图标文件(*.ico)、通过 icondirs 编译变量指定的目录以及 Ruby 源码目录下的 win32 目录将根据其基本名称包含在 DLL 或可执行文件中。

$(RUBY_INSTALL_NAME).ico or ruby.ico   --> $(RUBY_INSTALL_NAME).exe
$(RUBYW_INSTALL_NAME).ico or rubyw.ico --> $(RUBYW_INSTALL_NAME).exe
the others                             --> $(RUBY_SO_NAME).dll

虽然 Ruby 源码没有分发图标,但你可以使用任何你喜欢的。你可以在搜索引擎上找到许多图像。例如,以下图标是使用 Ruby logo kit 制作的