跳转到主要内容

Windows的GTK堆栈

项目描述

gvsbuild

CI

此Python脚本帮助您使用Visual Studio在Windows上构建完整的GTK库堆栈。目前支持GTK 3和GTK 4。

仅安装GTK

如果您只想在Windows上运行GTK而不是自行构建,您可以从最新发布版下载zip文件,并将其解压缩到C:\gtk

它包含GTK4、Cairo、PyGObject、Pycairo、GtkSourceView5、adwaita-icon-theme以及它们的所有依赖项。

请注意,然而,这些二进制文件提供“原样”交付,没有任何形式的保证。它们仅包含我们最新CI运行的结果。它们未经测试,我们无法保证及时更新,即使是安全问题。我们强烈建议您自行构建二进制文件,尤其是如果您计划与应用程序一起分发它们或在生产中使用。

环境变量

最后,使用以下方法将GTK添加到您的环境变量中

$env:Path = "C:\gtk\bin;" + $env:Path
$env:LIB = "C:\gtk\lib;" + $env:LIB
$env:INCLUDE = "C:\gtk\include;C:\gtk\include\cairo;C:\gtk\include\glib-2.0;C:\gtk\include\gobject-introspection-1.0;C:\gtk\lib\glib-2.0\include;" + $env:INCLUDE

PyGObject和PyCairo

如果您将要使用PyGObject和PyCairo,您还需要使用gvsbuild生成的wheels与您的Python虚拟环境一起使用,以解决这个PyGObject错误

pip install --force-reinstall (Resolve-Path C:\gtk\wheels\PyGObject*.whl)
pip install --force-reinstall (Resolve-Path C:\gtk\wheels\pycairo*.whl)

构建GTK

该脚本支持多个版本的Visual Studio - 目前我们专注于VS 2022,但我们包括其他版本的工程,并且我们欢迎接受补丁。

该脚本专注于GTK及其生态系统(例如GStreamer)。然而,只要贡献者承担起保持其更新的责任,我们就愿意添加更多库。支持的项目位于projects目录中的模块。

该脚本需要Windows桌面版Visual Studio、Python 3和msys2的可用安装。脚本将下载构建库所需的任何附加工具,并将从本地目录使用它们,无需安装。截至目前,这些工具包括cmake、meson、ninja、nuget和perl。

脚本从项目的原始位置获取项目的源tarball,但在某些情况下,可能需要在GitHub上托管修补过的tarball。为确保下载文件的完整性,脚本会检查每个下载的SHA256哈希值。下载使用TLS进行,使用系统提供的SSL证书,但在出错的情况下,会忽略证书错误重新尝试下载。

首先,我们需要安装先决条件。有两种主要选项

  1. WinGet - 可用于Windows 11和Windows 10的现代版本
  2. Chocolately - Windows其他版本的替代方案

使用WinGet的先决条件

如果您希望使用Chocolately而不是WinGet,可以跳过本节,并遵循使用Chocolately的先决条件步骤。

WinGet

WinGet是Windows包管理器,在Windows 11和Windows 10(1809 / build 17763)的现代版本中作为应用安装器包的一部分在Windows Store中提供。

Git

要在Windows中设置开发环境,作为管理员执行Git

winget install --id Git.Git -e --source winget

MSYS2

下一步中的两个开发环境都需要安装MSYS2。

安装MSYS2

保持PowerShell以管理员身份打开并执行

winget install --id MSYS2.MSYS2 -e --source winget

安装Visual Studio 2022

使用您的管理员PowerShell终端

winget install Microsoft.VisualStudio.2022.BuildTools -e --source winget --silent --override "--wait --quiet --add ProductLang En-us --add Microsoft.VisualStudio.Workload.VCTools --includeRecommended"

安装后,重新启动计算机。

注意:目前支持Visual Studio 2013(不是所有项目)、2015、2017、2019和2022版本。

安装最新的Python

使用您的管理员PowerShell终端

winget install --id Python.Python.3.12 -e --source winget
  1. 以普通用户打开PowerShell终端并检查python版本

    py -3.12 --version
    

使用Chocolately的先决条件

如果您已经使用WinGet安装了先决条件,可以跳过本节。

Chocolately

WinGet的替代方案是使用Chocolately作为Windows的包管理器。

要安装它,以管理员身份打开PowerShell,然后执行

Set-ExecutionPolicy Bypass -Scope Process -Force; iex ((New-Object System.Net.WebClient).DownloadString('https://community.chocolatey.org/install.ps1'))

要运行后续步骤中的本地脚本,也执行Set-ExecutionPolicy RemoteSigned。这允许本地PowerShell脚本无需签名即可运行,但仍然需要为远程脚本签名。

Git

要在Windows中设置开发环境,作为管理员执行Git

choco install git

MSYS2

下一步中的两个开发环境都需要安装MSYS2。

安装MSYS2

保持PowerShell以管理员身份打开并执行

choco install msys2

安装Visual Studio 2022

使用您的管理员PowerShell终端

choco install visualstudio2022-workload-vctools

注意:目前支持Visual Studio 2013(不是所有项目)、2015、2017、2019和2022版本。

安装最新的Python

使用您的管理员PowerShell终端

choco install python312
  1. 以普通用户打开PowerShell终端并检查python版本

    py -3.12 --version
    

安装gvsbuild

安装gvsbuild的推荐方法是使用pipx。打开一个新的普通用户PowerShell终端并执行

py -3.12 -m pip install --user pipx
py -3.12 -m pipx ensurepath
pipx install gvsbuild

或者,您也可以使用git克隆存储库并安装它。打开一个新的普通用户PowerShell终端并执行

mkdir C:\gtk-build\github
cd C:\gtk-build\github
git clone https://github.com/wingtk/gvsbuild.git
cd C:\gtk-build\github\gvsbuild
python -m venv .venv
.\.venv\Scripts\activate.ps1
pip install .

构建GTK

在同一个PowerShell终端中,执行

gvsbuild build gtk3

或者,如果您想构建GTK 4,执行

gvsbuild build gtk4

拿一杯咖啡,构建可能需要几分钟才能完成。

将GTK添加到您的环境变量中

  1. 从开始菜单,转到“编辑您帐户的环境变量”的“控制面板”条目。
  2. 双击变量列表顶部的 路径 行。点击“新建”向列表添加新项。
  3. 粘贴 C:\gtk-build\gtk\x64\release\bin
  4. 连续点击两次“确定”。

现在您可以使用GTK了!

额外的Gvsbuild用法

在Visual Studio中使用GTK

  1. 打开Visual Studio,使用“空项目”模板“创建新项目”

  2. 在左侧,右键点击“源文件”,选择“添加”,然后“新建项...”,将名称更改为 main.c

  3. 粘贴以下内容,然后保存文件

    #include <gtk/gtk.h>
    
    static void activate_cb(GtkApplication *app) {
      GtkWidget *window = gtk_application_window_new(app);
      gtk_widget_set_visible(window, true);
    }
    
    int main(int argc, char **argv) {
      GtkApplication *app =
          gtk_application_new("org.app", G_APPLICATION_DEFAULT_FLAGS);
      g_signal_connect(app, "activate", G_CALLBACK(activate_cb), NULL);
      return g_application_run(G_APPLICATION(app), argc, argv);
    }
    
  4. 通过右键点击并选择“属性”进入您的项目设置

    screenshot showing the properties item is at the bottom of the context menu

  5. 在左侧,打开“C/C++”,然后选择“命令行”。

    1. 打开“PowerShell”并运行命令 pkg-config --cflags gtk4 --msvc-syntax
    2. 将结果粘贴到Visual Studio属性窗口底部的“附加选项”字段中。

    screenshot showing the "Additional Options" field to modify

  6. 仍然在Visual Studio窗口中,点击“链接器”,选择“命令行”。与上一步类似,但使用 pkg-config --libs gtk4 --msvc-syntax 的输出。

  7. 点击“确定”

  8. 在上面的菜单栏中,点击“调试”和“不调试启动”

在Rust中使用GTK

查看优秀的 gtk-rs 书籍。您可以跳过“安装GTK 4”步骤,因为上面的步骤已经涵盖了。

使用PyGObject

首先,将GTK添加到您的环境变量中

$env:LIB = "C:\gtk-build\gtk\x64\release\lib;" + $env:LIB
$env:INCLUDE = "C:\gtk-build\gtk\x64\release\include;C:\gtk-build\gtk\x64\release\include\cairo;C:\gtk-build\gtk\x64\release\include\glib-2.0;C:\gtk-build\gtk\x64\release\include\gobject-introspection-1.0;C:\gtk-build\gtk\x64\release\lib\glib-2.0\include;" + $env:INCLUDE

接下来,添加类似 --enable-gi--py-wheel 的选项

gvsbuild build --enable-gi --py-wheel gtk4 pygobject

一旦完成,您就需要使用gvsbuild生成的wheels与您的Python虚拟环境一起使用,以解决这个PyGObject错误

pip install --force-reinstall (Resolve-Path C:\gtk-build\build\x64\release\pygobject\dist\PyGObject*.whl)
pip install --force-reinstall (Resolve-Path C:\gtk-build\build\x64\release\pycairo\dist\pycairo*.whl)

在GTK中使用图标

如果您打算在GTK应用程序中使用SVG图标,还需要构建 librsvg。通常您想使用 gvsbuild build gtk4 adwaita-icon-theme 构建GTK,这将包括librsvg和hicolor-icon-theme。

其他选项

要了解有关可能命令的更多信息,请运行

gvsbuild --help

要获取构建命令的详细帮助,请运行

gvsbuild build --help

可以通过将文件名前的@字符来设置一些参数,例如 vs2015-release.pro,该文件包含选项,每行一个,由换行符分隔

--vs-ver
14
--win-sdk
8.1
--configuration
release

即使这种方式不是最容易书写或阅读的格式,我们也消除了在文件名和目录中转义空格的问题。然后您可以使用它

gvsbuild build @vs2015-release.pro gtk3-full

故障排除

  • 如果构建失败,尝试使用 --clean 重新构建它,如果仍然失败,尝试使用 --from-scratch 重新构建。
  • 如果tar包下载失败,部分文件将无法通过哈希检查,删除文件并重试。
  • 如果您遇到内存不足错误,请通过添加 --ninja-opts -j2 选项来减少一次构建的处理器核心数,其中2是核心数。

OpenSSL

除了上面的设置说明之外,要构建OpenSSL,您还需要安装Visual C++ 2013 redistributable package。要安装它,以管理员身份打开PowerShell并执行

choco install vcredist2013

与其他包类似,您可以通过执行以下命令构建OpenSSL

gvsbuild build openssl

依赖关系图

要查看和分析各个项目之间的依赖关系,在文本或Graphviz格式中,请使用脚本deps.py

gvsbuild deps --graph --gv-file test.gv

不使用选项时,将打印所有项目的简单依赖关系,通常使用--help将打印选项/命令的摘要。

Gvsbuild用户

以下项目正在使用Gvsbuild为Windows GTK提供跨平台支持

您是否在使用Gvsbuild?请提交一个Pull Request将您的应用程序添加到列表中。

许可协议

此构建脚本是GPL2.0许可,完整内容请参阅COPYING文件。

由构建脚本生成的二进制文件根据构建的项目许可证条款进行许可(例如,glib是LGPL,因此您可以在LGPL的条款下使用此脚本构建的glib.dll)。

仓库中包含的补丁根据它们应用的项目的许可证条款进行许可。

致谢

此工具源于HexChat开发者创建的gtk-win32 PowerShell脚本,用于在Windows上构建。尽管此项目现已存档,但如果您对历史感兴趣,可以在此处探索原始项目:https://github.com/hexchat/gtk-win32

如果没有Fan Chun-wei(fanc999)的不可思议的工作,在MSVC上编译GTK堆栈将不可能。如果您想了解更多关于如何工作的详细信息,请参阅使用Visual C++ 2008及更高版本编译GTK+(和Clutter)堆栈

项目详情


下载文件

下载您平台上的文件。如果您不确定选择哪个,请了解更多关于安装包的信息。

源代码分发

gvsbuild-2024.10.0.tar.gz (2.2 MB 查看哈希值)

上传时间 源代码

构建分发

gvsbuild-2024.10.0-py3-none-any.whl (2.9 MB 查看哈希值)

上传时间 Python 3

由以下支持

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误记录 StatusPage StatusPage 状态页面