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

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

我想使用 zstd我的 C++ 库项目的压缩库。我的构建系统基于 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 期望的根目录中。我试过:

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

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

最佳答案

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

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

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

  3. 添加子目录,使其包含:

    项目(...)

    子目录('构建')

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

    subdir('介子')

关于c++ - 如何使用介子构建系统将 zstd 构建为子项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64079268/

相关文章:

java - 从导入的依赖项覆盖 Gradle 项目配置

android - Unresolved reference : Libraries - buildSrc

c++ - Windows 找不到 MinGW

c++ - Eigen:给map赋值

java - 如何处理重大框架/依赖升级?

meson-build - 将静态库链接到共享库或二进制文件

c++ - 为介子设置正确的编译器

arm - 在介子中,有没有办法覆盖交叉构建定义文件中的内置选项?

c++ - 如何刷新/重绘屏幕(不是程序窗口)

c++ - 多 channel Mat显示功能