Windows
Ruby 支持 Windows 上的一些原生构建平台。
-
mswin: 使用 Microsoft Visual C++ 编译器和 vcruntimeXXX.dll 进行构建
-
mingw-msvcrt: 使用 Mingw 编译器和 msvcrtXX.dll 进行构建
-
mingw-ucrt: 使用 Mingw 编译器和 Windows Universal CRT 进行构建
使用 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_PREFIX 为 mingw-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
-
Windows 10/Windows Server 2016 或更高版本。
-
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 等之外的最低要求。 -
请设置环境变量
INCLUDE、LIB、PATH以便从命令行正确运行所需的命令。这些通常由vsdevcmd.bat或vcvarall*.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
-
-
如果你想从 GIT 源码构建,需要以下命令。
-
git -
ruby3.1 或更高版本
你可以使用 scoop 来安装它们,例如:
scoop install git ruby
Windows 版
git配置了autocrlf为true。Ruby 测试套件可能会在autocrlf设置为true时失败。你可以将其设置为false,例如:git config --global core.autocrlf false
-
-
你需要在 Ruby 仓库目录中使用 vcpkg 安装所需的库,例如:
vcpkg --triplet x64-windows install
-
启用你命令行的命令扩展。这是
cmd.exe的默认行为。如果你想显式启用它,请使用/E:ON选项运行cmd.exe。
如何编译和安装
-
在你的构建目录中执行
win32\configure.bat。你可以将目标平台指定为一个参数。例如,运行configure --target=i686-mswin32。你也可以指定安装目录。例如,运行configure --prefix=<install_directory>。安装目录的默认值为/usr。 -
如果你想追加到可执行文件和 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。 -
你需要使用
--with-opt-dir选项指定 vcpkg 目录,例如win32\configure.bat --with-opt-dir=C:/vcpkg_installed/x64-windows -
如果你是从 GIT 源码构建,请运行
nmake up。 -
运行
nmake -
如果你需要将 vcpkg 安装的库(如
libssl-3-x64.dll)复制到构建目录,请以管理员权限运行nmake prepare-vcpkg。 -
运行
nmake check -
运行
nmake install
构建示例
-
在 Ruby 源码目录中构建。
ruby source directory: C:\ruby build directory: C:\ruby install directory: C:\usr\local
C: cd \ruby win32\configure --prefix=/usr/local nmake nmake check nmake install
-
在 Ruby 源码目录的相对目录中构建。
ruby source directory: C:\ruby build directory: C:\ruby\mswin32 install directory: C:\usr\local
C: cd \ruby mkdir mswin32 cd mswin32 ..\win32\configure --prefix=/usr/local nmake nmake check nmake install
-
在不同驱动器上构建。
ruby source directory: C:\src\ruby build directory: D:\build\ruby install directory: C:\usr\local
D: cd D:\build\ruby C:\src\ruby\win32\configure --prefix=/usr/local nmake nmake check nmake install DESTDIR=C:
-
构建 x64 版本(需要原生的 x64 VC++ 编译器)
ruby source directory: C:\ruby build directory: C:\ruby install directory: C:\usr\local
C: cd \ruby win32\configure --prefix=/usr/local --target=x64-mswin64 nmake nmake check 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 制作的
-
官方网站上的小型 favicon