meson
meson 构建工具
网站 meson-build
配置示例
cc = meson.get_compiler('c')
all_deps = []
thread_dep = dependency('threads')
all_deps += thread_dep
src_dir = include_directories('../src')
exe = executable('name', ['src1.c', 'src2.c'],
dependencies: all_deps,
include_directories: src_dir)
使用 address sanitizer
CC=clang meson build -Db_sanitize=address -Db_lundef=false
使用 clang 静态分析
meson build
ninja -C build scan-build
自定义外部依赖
一个外部依赖只需要知道头文件和链接库(静态/动态)
my_inc = include_directories(...)
my_lib = static_library(...)
my_dep = declare_dependency(link_with : my_lib,
include_directories : my_inc)
将依赖做子目录
首先在子目录中放入依赖的源码,并且在其中定义子项目的 meson.build
文件
foo_dep = declare_dependency(...)
之后就可以在主项目中依赖它
foo_dep = dependency('foo', fallback : ['foo', 'foo_dep'])
子项目
从子项目获取依赖
libsimple_proj = subproject('libsimple')
libsimple_dep = libsimple_proj.get_variable('libsimple_dep')
使用 wrap 管理依赖
在 subprojects
文件夹中创建 libfoobar.wrap
文件, 其中指定源码位置 [wrap-file]
和提供的依赖 [provide]
,格式参考 这里
对于非 meson-build 项目,还需要一个 meson.build
文件来添加支持,这个额外的文件称作 patch
, 这个额外配置文件可以从网络中下载获取(通过 patch_url
, 参考这里)
示例 subprojects/cache2.wrap
:
[wrap-file]
directory = Catch2-2.13.3
source_url = https://github.com/catchorg/Catch2/archive/v2.13.3.zip
source_filename = Catch2-2.13.3.zip
source_hash = 1804feb72bc15c0856b4a43aa586c661af9c3685a75973b6a8fc0b950c7cfd13
patch_directory = catch2
[provide]
catch2 = catch2_dep
自己编写的配置文件应该放在 subprojects/packagefiles/libfoobar/meson.build
中,并设置 patch_directory
示例 subprojects/packagefiles/cache2/meson.build
:
project('catch2',
'cpp',
version : '2.13.3',
license : 'Boost'
)
catch2_dep = declare_dependency(
include_directories : include_directories('single_include')
)
评论
Comments powered by Disqus