Windows的GTK堆栈
项目描述
gvsbuild
此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证书,但在出错的情况下,会忽略证书错误重新尝试下载。
首先,我们需要安装先决条件。有两种主要选项
- WinGet - 可用于Windows 11和Windows 10的现代版本
- 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
-
以普通用户打开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
-
以普通用户打开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添加到您的环境变量中
- 从开始菜单,转到“编辑您帐户的环境变量”的“控制面板”条目。
- 双击变量列表顶部的
路径
行。点击“新建”向列表添加新项。 - 粘贴
C:\gtk-build\gtk\x64\release\bin
- 连续点击两次“确定”。
现在您可以使用GTK了!
额外的Gvsbuild用法
在Visual Studio中使用GTK
-
打开Visual Studio,使用“空项目”模板“创建新项目”
-
在左侧,右键点击“源文件”,选择“添加”,然后“新建项...”,将名称更改为
main.c
-
粘贴以下内容,然后保存文件
#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); }
-
通过右键点击并选择“属性”进入您的项目设置
-
在左侧,打开“C/C++”,然后选择“命令行”。
- 打开“PowerShell”并运行命令
pkg-config --cflags gtk4 --msvc-syntax
- 将结果粘贴到Visual Studio属性窗口底部的“附加选项”字段中。
- 打开“PowerShell”并运行命令
-
仍然在Visual Studio窗口中,点击“链接器”,选择“命令行”。与上一步类似,但使用
pkg-config --libs gtk4 --msvc-syntax
的输出。 -
点击“确定”
-
在上面的菜单栏中,点击“调试”和“不调试启动”
在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提供跨平台支持
- Deluge - BitTorrent客户端
- Gaphor - 简单的SysML/UML建模工具
- PothosSDR - 软件定义无线电开发环境
- SkyTemple Randomizer - Pokemon Mystery Dungeon Explorers of Sky的随机器
您是否在使用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的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 8303342a9c8d27a2ee910a91a71ee5f75fa68db590104fec83f5e29776fa7ff9 |
|
MD5 | c359f08fa394b17b0a912860329f11a5 |
|
BLAKE2b-256 | 6f5aa4748cddebec15f2cdacaa2bbdd8bd74c3d355c0c9e9b3380b5abd4fa957 |
gvsbuild-2024.10.0-py3-none-any.whl的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 00b51e1627279bf511f62bafaefafc7965d66d401b6e0d04e0d6b41142698412 |
|
MD5 | d5720f8ec34dc4e117b9f99d1c5681c9 |
|
BLAKE2b-256 | 21277c653af494722677e100547f5088df3c6d2e4d91b09356735500bb829e6e |