【问题标题】:How to build zstd as a subproject with meson build system如何使用介子构建系统将 zstd 构建为子项目
【发布时间】:2021-01-12 16:24:35
【问题描述】:

我想为我的 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介子包装文件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 作为默认构建系统,并且介子文件位于 build/meson 子文件夹中,而不是位于介子期望的根目录中。我试过了:

  • 子项目使用default_options: 'builddir=build/meson',但没有效果
  • 使用 CMAKE 集成构建 zstd 但因其他错误而失败,这使得设置更加复杂
  • 制作补丁以将 zstd 介子构建文件向上移动两个目录到 zstd 的根目录,但这需要更多的依赖关系,后来由于路径解析失败,因为 zstd 期望文件位于 build/meson 而不是根目录。

我可以轻松地将 zstd 构建为我的 C++ 库的介子子项目吗?

【问题讨论】:

    标签: c++ dependency-management meson-build zstd


    【解决方案1】:

    介子中没有选项 builddir,而使用 default_options 您无论如何都可以只设置该子项目的项目选项(zstd/build/meson/meson_options.txt )。因此,我认为,解决这个问题的唯一方法是创建一个补丁,它应该相当简单:

    1. 在根子项目的目录中创建 meson.build

    2. project(...)zstd/build/meson/meson.build 移到这个

    3. 添加subdir,使其包含:

      项目(...)

      subdir('build')

    4. 将一行 meson.build 放到 zstd/build

      subdir('介子')

    【讨论】:

    • 对,我正试图弄清楚这一点,感谢您的澄清。我不想过多地偏离 zstd 源代码,也不想跟踪上游的变化(如果有的话)。所以我对官方介子包装数据库做了一个补丁,希望可以被接受,我可以只使用带有包装文件的单行subproject ('zstd')。同时,我只会使用数据库中可用的旧版本 1.3.3,这是我的 PR github.com/mesonbuild/zstd/pull/4 更新版本,据我所知,有人将不得不手动制作一个压缩补丁
    • @oleksii 谢谢,您可以尝试在 meson googlegroup 上提问,在那里您有更好的机会联系作者:Meson 构建系统 。我没有使用过 wraps,但从我读过的内容来看,发现不可能更改 dir - 也许值得提出功能请求。如果你这样做,请告诉我,我很想知道什么是更好的选择...
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-11-12
    • 1970-01-01
    • 1970-01-01
    • 2019-06-14
    • 1970-01-01
    • 1970-01-01
    • 2012-11-14
    相关资源
    最近更新 更多