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 介子包装文件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++ 库的介子子项目吗?

4

1 回答 1

1

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

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

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

  3. 添加subdir,因此它包含:

    项目(...)

    子目录('构建')

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

    子目录(“介子”)

于 2020-09-26T21:25:56.203 回答