如何使用Meson构建zstd子项目

3
我想在我的 C++ 库项目中使用 zstd 压缩库。我的构建系统基于 meson。我的 meson.build 文件如下所示。
project('foo', 'cpp', default_options : 
    ['cpp_std=c++17', 'buildtype=release'], 
    version : '0.1', license: 'MIT')

subproject('zstd', default_options: 'builddir=build/meson')

我创建了一个zstd Meson包装文件 subprojects/zstd.wrap

[wrap-file]
directory = zstd-1.4.5

source_url = https://github.com/facebook/zstd/releases/download/v1.4.5/zstd-1.4.5.tar.gz
source_filename = zstd-1.4.5.tar.gz
source_hash = 98e91c7c6bf162bf90e4e70fdbc41a8188b9fa8de5ad840c401198014406ce9e

当我运行 meson compile 时,出现了这个错误。
../meson.build:5:0: ERROR: Subproject exists but has no meson.build file

问题似乎在于zstd使用CMAKE作为默认构建系统,并且meson文件位于build/meson子文件夹中,而不是meson期望的根目录。我尝试过:
  • 为子项目使用default_options: 'builddir=build/meson',但没有效果
  • 使用CMAKE集成构建zstd,但失败了并使设置更加复杂
  • 制作补丁将zstd meson构建文件上移两个目录到zstd的根目录,但这需要更多的依赖项,并且后来由于zstd期望在build/meson而不是根目录中找到文件而导致路径解析失败。

我能否轻松地将zstd构建为我的C++库的meson子项目?

1个回答

1
在meson中没有builddir选项,而default_options只能设置子项目的项目选项(zstd/build/meson/meson_options.txt)。因此,我认为解决这个问题的唯一方法是创建一个补丁,而且应该相当简单:
1. 在根子项目目录中创建meson.build。 2. 将zstd/build/meson/meson.build中的project(...)移动到此文件中。 3. 添加subdir,使其包含:project(...) subdir('build') 4. 将一行meson.build删除到zstd/build中。subdir('meson')

1
没错,我一直在试图解决这个问题,感谢您的澄清。我不想太偏离zstd源代码,并且也不想跟踪上游的更改(如果有的话)。因此,我制作了一个官方meson wrap数据库的补丁,希望可以被接受,然后我就可以使用一个单行命令subproject ('zstd')和一个wrap文件。同时,我会使用数据库中可用的旧版本1.3.3,这是我的PR https://github.com/mesonbuild/zstd/pull/4,针对新版本,从我所看到的情况来看,有人将不得不手动制作一个压缩补丁。 - oleksii
@oleksii 谢谢,你可以尝试在 Meson Build System 的 googlegroup 上提问,那里你有更好的机会联系到作者:mesonbuild@googlegroups.com。我没有使用过 wraps,但从我所读到和发现的来看,似乎无法更改目录 - 也许这值得作为一个功能请求。如果你这样做了,请告诉我,我很想知道什么是更好的选择... - pmod

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接