2024年mods的名词解释是什么

mods的名词解释是什么meson 是一个构建系统 类似于 CMake 或者 GNU Autotools meson 只是负责配置构建 后台默认是用 ninja 来编译的 当然也支持其它后台 ninja 是一个小型的致力于编译速度优化的编译系统 相当于 make 的替代物 所以 meson ninja 相当于 Cmake make meson 设计目标是好用

meson是一个构建系统,类似于 CMake 或者GNU Autotools. meson只是负责配置构建,后台默认是用ninja来编译的(当然也支持其它后台)。ninja是一个小型的致力于编译速度优化的编译系统,相当于make的替代物。所以meson+ninja相当于Cmake+make。

meson设计目标是好用,同时保持高性能。它采用了一种自定义语言,号称简单、清晰和简洁性。很多灵感来自于Python编程语言,具有较好的易读性。

meson的另一个设计目标,是为现代编程工具提供辅助的支持,包括单元测试、代码覆盖报告、预编译头文件等。所有这些特性用于任何meson的项目,用户不需要另外使用第三方宏或编写shell脚本。

Meson遵循其他流行编译系统(如CMake和GNU Autotools)的整体结构,编译被分为两个独立的步骤: 配置步骤和编译步骤。
第一步检查系统,检查依赖关系,并执行配置编译所需的所有其他步骤。然后生成实际的编译系统。
第二步是简单地执行这个生成的编译系统。最终的结果是一堆编译目标,通常是可执行文件、共享库和静态的库。

包含源代码的目录称为源目录。相应地,编译输出的目录称为编译目录。
在其他编译系统中,这两个目录通常是相同的,编译系统创建的所有文件都放在编译目录中。这被称为源内编译
Meson编译目录和代码目录是分离的,称为源外编译
源外编译有几个好处:生成的文件不会影响源代码,更重要的是可以创建多个编译目录,生成多个编译版本,比如调试版、发布版或者我们想要的任何其它差异。这时候源码目录都是不需要改动的,我们只需要在不同编译目录去编译对应的版本即可。
在编译源代码时,通常会运行一组单元测试,他们确保程序正常运行。测试通过就安装编译结果,然后就可以使用了。

1.运行Meson

有两种不同的方式来调用Meson。

  • 使用命令/path/到/source/meson.py从源树中直接运行。
  • 安装Meson,使用meson命令来运行。
    为简单起见,本手册仅使用后一种格式。

1.1示例代码

你可以通过以下命令取得一个工程示例。该示例会生成一个testproject.c、meson.build:

$ meson init --name testproject Using "testproject" (project name) as name of executable to build. Defaulting to generating a C language project. Sample project created. To build it run the following commands: meson setup builddir meson compile -C builddir $ ll total 16 drwxr-xr-x 2 e0005055 ibu 4096 1014 09:56 ./ drwxr-xr-x 3 e0005055 ibu 4096 1014 09:37 ../ -rw-r--r-- 1 e0005055 ibu 176 1014 09:56 meson.build -rw-r--r-- 1 e0005055 ibu 254 1014 09:56 testproject.c 

配置编译目录

假设我们已经有了上述的源代码,意思是顶层目录有一个meson.build文件。运行下面的命令来配置编译选项:

meson setup builddir ./ 

meson基础语法是:meson [command] [arguments] [options].
setup 命令接受编译目录和源码目录 setup builddir srcdir .
如果没有指定源码目录,那么meson会把当前目录和meson.build所在的目录作为源码目录。此外setup是meson默认命令,可以省略。因此我们可以直接运行:

meson builddir 

这将在builddir生成编译目录和配置文件。

$ ./builddir/ meson-info/ meson-logs/ meson-private/ testproject.p/ 

编译工程

meson compile -C [编译目录]

$ meson compile -C builddir ninja: Entering directory `builddir' [2/2] Linking target testproject 

builddir下会生成可执行文件testproject,我们可以查看并运行程序testproject:

$ ./builddir/ meson-info/ meson-logs/ meson-private/ testproject testproject.p/ $ ./builddir/testproject This is project testproject. 

你也可以用ninja直接编译:

ninja -C builddir 

运行测试

meson test -C builddir 

同样可以用ninja直接调用:

ninja -C builddir test 

安装程序

meson install -C builddir 

文件默认安装到/usr/local,可以用–prefix /your/prefix或者DESTDIR 环境变量自定义路径:

DESTDIR=/path/to/staging meson install -C builddir 

同样可以用ninja直接调用:

ninja -C builddir install 

1.2编译类型

默认情况下,meson使用调试编译类型,该模式下会打开debug和警告,并不会进行优化。–buildtype命令可以更改编译类型:

  • plain 用户指定编译选项,一般用于发行包
  • debug 默认模式,生成调试和警告并不做任何优化
  • debugoptimized 生成调试和警告,但优化编译 (-g -O2)
  • release 全体优化编译,没有调试信息

1.3声明共享库,给其他模组使用

可以用declare_dependency,将当前编译的库文件提供给其他模组使用。
通过include_directories来添加头文件路径,这样就可以直接在此目录中查找头文件。
在这里插入图片描述
注意此时source必须填写,否则会提示找不到对应的引用。
之后,其他模组只需要在依赖中添加es_cjson_dep就可以了。

1.4添加第三方共享库依赖

cc = meson.get_compiler('c') cxx = meson.get_compiler('cpp') libm = cc.find_library('m', required : false) configinc = include_directories('../3rd/include') gstavtp = library('gstavtp', avtp_sources, c_args : gst_plugins_bad_args, include_directories : [configinc], dependencies : [gstaudio_dep, gstvideo_dep, avtp_dep, libm], install : true, install_dir : plugins_install_dir, ) 

当第三方库不在默认路径时,可以通过dirs添加绝对路径来指定(老版本不支持,请升级):
在这里插入图片描述
注意,include_directories指定头文件时,可以使用相对路径,但find_library指定库文件必须使用绝对路径(不排除后续支持相对路径的可能)。

1.5指定其它编译后台

meson后台默认是用ninja来编译。如果要使用其它后台来编译,在配置的时候加上–backend命令。例如,后台想用vs编译:

meson builddir --backend=vs 

1.6生成代码发布包

meson dist

知秋君
上一篇 2024-11-13 11:55
下一篇 2024-11-08 18:48

相关推荐