问题描述
我想为我的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 )。因此,我认为,解决此问题的唯一方法是创建一个补丁,它应该相当简单:
-
在根子项目的目录中
-
创建 meson.build
-
将项目(...)从 zstd / build / meson / meson.build 移至此
-
添加 subdir ,因此它包含:
项目(...)
subdir('build')
-
将单行meson.build拖放到 zstd / build
subdir('meson')