如何使用介子生成系统将zstd生成为子项目

问题描述

我想为我的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 ++库的介子子项目吗?

解决方法

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

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

  2. 项目(...) zstd / build / meson / meson.build 移至此

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

    项目(...)

    subdir('build')

  4. 将单行meson.build拖放到 zstd / build

    subdir('meson')

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...