Gee 和 GXml 应该是依赖关系,就像 GIO、GLib 和 GTK+ 一样。所以你应该尝试:
example_deps = [
dependency('gio-2.0', version: '>= 2.50'),
dependency('gtk+-3.0', version: '>= 3.22'),
dependency('glib-2.0', version: '>= 2.50'),
dependency('gobject-2.0'),
dependency('gee-0.8'),
dependency('gxml-0.16'),
]
通常你不需要超出这个范围。这使得--pkg
中的选项vala_flags
不必要。介子会为你做到这一点。介子的工作方式是它使用valac
生成 C 代码,然后在单独的阶段使用 C 编译器生成二进制文件。通过使用--pkg
你只是告诉valac
使用哪个 VAPI 文件,但不通知 C 编译器使用哪个 VAPI 文件pkg-config
用于 C 库的包。
另请注意我添加了gobject-2.0
作为依赖。如果我没记错的话,GNOME Builder 会错过这一点,并且它确实会影响构建。
错误消息,error: The namespace name 'Gee' could not be found
,令人烦恼。这是 Vala 编译器的错误,我本以为编译器能够使用以下命令找到 VAPI 文件vala_args
你尝试过的方法。也许您从源代码构建了 Gee,但没有在系统范围内安装?
Meson 确实允许添加另一个 VAPI 搜索目录:
add_project_arguments(['--vapidir',
join_paths(meson.current_source_dir(), 'vapi')
],
language: 'vala'
)
还有更多详细信息瓦拉页介子构建文档。
Meson 0.42 版本中添加了 Genie 支持。所以meson_version:
应该>= 0.42.0
.
如果仍然存在问题,那么这里有一个MCVE使用 Genie、Gee 和 Meson。这应该从命令行编译。将以下 Genie 程序另存为genie-gee.gs
:
[indent=2]
uses Gee
init
var my_list = new ArrayList of string()
my_list.add( "one" )
my_list.add( "two" )
for item in my_list
print( item )
然后将以下 Meson 文件另存为meson.build
:
project('minimal-genie-gee-example',
'vala', 'c'
)
genie_gee_deps = [
dependency('glib-2.0'),
dependency('gobject-2.0'),
dependency('gee-0.8'),
]
executable('genie-gee',
'genie-gee.gs',
dependencies: genie_gee_deps
)
从命令行使用 Meson 设置构建目录:
meson setup builddir
这应该表明已找到依赖项,例如:
Native dependency gee-0.8 found: YES 0.18.0
然后使用忍者建造构建项目:
ninja -C builddir
对于任何使用 Fedora 的人ninja
is ninja-build
.
Meson 设置构建目录的任何问题都会记录到builddir/meson-logs/meson-log.txt
.
如果这有效,但在 GNOME Builder 中失败,那么我唯一的想法是 GNOME Builder 是使用 Flatpak 安装的。 Flatpak 的沙盒环境可能会影响对依赖项的访问。
Update:根据评论中的讨论,GNOME Builder 使用的运行时似乎是问题所在。 Builder 的一个强大功能是能够选择用于构建软件的 Flatpak 运行时。如果您遵循在工作站上安装库和头文件的“传统”开发方式,请确保主机操作系统选择而不是 Flatpak 运行时。 GNOME Flatpak 运行时似乎不包含 libgee。
Update2:当编写 Flatpak 构建器清单并且依赖项不在 Flatpak 运行时/SDK 中时,请将该依赖项添加为 Flatpak 构建器清单中的另一个模块。这允许 GNOME Builder 使用 Flatpak 通过 Flatpak 运行时构建软件。 AsymLabs 答案中给出了示例清单。