如何使用介子构建系统将 zstd 构建为子项目

How to build zstd as a subproject with meson build system

我想使用 zstd compression library for my C++ library project. My build system is based on 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 作为默认构建系统,meson 文件位于 build/meson 子文件夹中,而不是 meson 期望的根目录中。我试过了:

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

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

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

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

  3. 添加subdir,所以它包含:

    项目(...)

    子目录('build')

  4. 下降 one-line meson.build 到 zstd/build

    子目录('meson')