Meson构建系统(一)

Meson构建系统(⼀)
关于Meson的中⽂参考资料⽐较少,⽐较全⾯的是Meson的官⽅⽹站()。本⼈在学习Meson的过程中,会总结⼀系列的⽂章来对Meson 进⾏介绍。第⼀篇关于Meson的简单学习和使⽤,将按照如下三个问题展开:
什么是Meson?
Meson有什么特点?
如何使⽤Meson?
⼀、什么是Meson
Meson(The Meson Build System)是个项⽬构建系统,如Makefile,automake,。Meson是⼀个Python实现的开源项⽬,其思想是,开发⼈员花费在构建调试上的每⼀秒都是浪费,同样等待构建过程直到真正开始编译都是不值得的。
因此,Meson的设计⽬的是在⽤户友好的同时不损害性能,Meson提供客户语⾔(custom language)作为主要⼯具,⽤户可以使⽤它完成项⽬构建的描述。客户语⾔的设计⽬标是简单(simplicity)、清晰(clarity)、简洁(conciseness),其中很多灵感来源于Python语⾔。
Meson的另个⼀主要设计⽬的是为现代编程⼯具提供优秀的⽀持和最好的实现。这包括⼀些特性如:单元测试(unit testing)、代码覆盖率报告(code coverage reporting)、头⽂件预编译(precompiled headers)。⽤户不需要寻三⽅宏指令(third party macros)或编写shell脚本来实现这些特性,Meson只要开箱即⽤(work out of the box)。
⼆、Meson有什么特点
对Linux,macOS,Windows,GCC,Clang,Visual Studio等提供多平台⽀持
⽀持的语⾔包括C,C ++,D,Fortran,Java,Rust
在⾮常易读且⽤户友好的⾮图灵完整DSL中构建定义
适⽤于许多操作系统和裸机的交叉编译
针对极快的完整和增量构建进⾏了优化,⽽不会牺牲正确性
内置的多平台依赖提供程序,可与发⾏版软件包⼀起使⽤
好玩!
以上这些特征均来⾃官⽹的介绍,我们在接下来的使⽤过程中只会涉及部分特性。
三、如何使⽤Meson
这⼀章将会包含⽐较多的使⽤细节,会在⼀系列的⽂章中去完善该部分内容。
3.1 Meson安装
⾸先是安装Python3.x版本,⽽且版本尽可能的⾼,我⽤的是Python3.5。⼀般来说安装Python是默认带有pip,但是如果系统缺⼀些库的话pip会不能成功安装,我踩到zlib的坑(pip3的安装可以参考)
具备pip3之后直接安装Meson Ninja
pip3 install meson ninja
这边多出⼀个Ninja⼯具,简单介绍⼀下。Ninja是⼀个轻量的构建系统,主要关注构建的速度。它与其他构建系统的区别主要在于两个⽅⾯:1. Ninja被设计成需要⼀个输⼊⽂件的形式,这个输⼊⽂件则由⾼级别的构建系统⽣成;2. Ninja被设计成尽可能快速执⾏构建的⼯具。
⼀般将Meson和Ninja配合使⽤,Meson负责构建项⽬依赖关系,Ninja进⾏编译。
3.2 简单的Meson构建样例
本节将会给出⼏个简单的Meson构建样例,粗略介绍Meson的使⽤⽅式。
构建项⽬⾸先需要对项⽬的构建需求进⾏描述,前⾯介绍过Meson提供custom language⽤于描述项⽬构建需求。
custom language包含诸多部分:变量,数值,字符串,数组,辞典,函数调⽤,⽅法调⽤,控制语句,功能函数,内置对象,返回对象...。暂时不对这些细节进⾏展开,从简单的⽰例开始。
a.构建⼀个可执⾏项⽬
创建⼀个项⽬⽬录,包含⼀个main.c⽂件
main.c:
#include <stdio.h>
int main(void)
{
printf("hellow project01\n");
return 0;
}
创建Meson构建描述⽂件meson.build(指定⽂件名)
meson.build:
project('project01', 'c')
executable("project", 'src/main.c')
项⽬⽬录结构:
project01/
├── meson.build
└── src
└── main.c
项⽬构建关系描述完成,接下来就需要通过调⽤Meson来⽣成构建⽬录及构建系统。这就涉及到meson command line的使⽤,当meson 安装完成后可以通过meson -v查看Meson 版本,这就是命令⾏。
meson -h / --help输出:
usage: meson [-h] {setup,configure,dist,install,introspect,init,test,wrap,subprojects,help,rewrite,compile} ...
optional arguments:
-h, --help                                                                          show this help message and exit
Commands:
If no command is specified it defaults to setup command.
{setup,configure,dist,install,introspect,init,test,wrap,subprojects,help,rewrite,compile}
setup                                                                              Configure the project
configure                                                                          Change project options
dist                                                                              Generate release archive
install                                                                            Install the project
introspect                                                                        Introspect project
init                                                                              Create a new project
test                                                                              Run tests
wrap                                                                              Wrap tools
subprojects                                                                        Manage subprojects
help                                                                              Print help of a subcommand
圆珠笔尖
rewrite                                                                            Modify the project definition
compile
接下来我们要使⽤setup 命令,它也是meson的默认命令,即 meson xxx 与 meson setup xxx 等价。
在meson.build⽬录执⾏
meson setup build
执⾏后有如下打印:
The Meson build system
Version: 0.55.3
Source dir: /home/yu.xinrong/meson_demo/project01
Build dir: /home/yu.xinrong/meson_demo/project01/build
Build type: native build
Project name: project01
Project version: undefined
C compiler for the host machine: cc (gcc 4.8.5 "cc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-39)")
C linker for the host machine: cc ld.bfd 2.25.1-22
Host machine cpu family: x86_64
Host machine cpu: x86_64
Build targets in project: 1
Found ninja-1.10.0.git.kitware.jobserver-1 at /usr/bin/ninja
NOTICE: You are using Python 3.5 which is EOL. Start。ing with v0.57, Meson will require Python 3.6 or newer
信息有Meson版本,源码⽬录和构建⽬录,⼀部分构建选项的参数,并且最后提⽰ninja的存在,可以直接使⽤ninja编译。Ninja编译项⽬:
cd build ninja
编译完成发现build⽬录中出现project可执⾏⽂件。
[root@localhost build]# ls -al
total 28
drwxr-xr-x. 6 root root  180 Sep 20 14:34 .
drwxr-xr-x. 4 root root  49 Sep 20 14:32 ..
-rw-r--r--. 1 root root 2581 Sep 20 14:32 build.ninja
-rw-r--r--. 1 root root  341 Sep 20 14:32 compile_commands.json
网站生成系统
drwxr-xr-x. 2 root root  264 Sep 20 14:32 meson-info
drwxr-xr-x. 2 root root  27 Sep 20 14:32 meson-logs
drwxr-xr-x. 2 root root  207 Sep 20 14:32 meson-private
-rw-r--r--. 1 root root  760 Sep 20 14:34 .ninja_deps
-
rw-r--r--. 1 root root  131 Sep 20 14:34 .ninja_log
-rwxr-xr-x. 1 root root 9600 Sep 20 14:34 project
drwxr-xr-x. 2 root root  26 Sep 20 14:34 project.p
[root@localhost build]# ./project
hellow project01
b.构建静态库项⽬
创建库⽂件项⽬,⽬录结构如下
project02
├── meson.build
└── src
├── third_lib.c
└── third_lib.h
third_lib.c:
#include <stdio.h>
#include "third_lib.h"
void info_print()
{
printf("hellow third library\n");
}
third_lib.h:
#ifndef _THIRD_LIB_
#define _THIRD_LIB_
void info_print();
#endif
meson.build:
project('project02', 'c')
static_library('thirdinfo', 'src/third_lib.c')
构建及编译完成后⽣成静态库libthirdinfo.a:
[root@localhost build]# ls -al
高压点火器total 20
drwxr-xr-x. 6 root root  194 Sep 20 14:45 .
drwxr-xr-x. 4 root root  49 Sep 20 14:45 ..
-rw-r--r--. 1 root root 2657 Sep 20 14:45 build.ninja
-
rw-r--r--. 1 root root  412 Sep 20 14:45 compile_commands.json -rw-r--r--. 1 root root 3556 Sep 20 14:45 libthirdinfo.a
drwxr-xr-x. 2 root root  31 Sep 20 14:45 libthirdinfo.a.p
drwxr-xr-x. 2 root root  264 Sep 20 14:45 meson-info
drwxr-xr-x. 2 root root  27 Sep 20 14:45 meson-logs
drwxr-xr-x. 2 root root  207 Sep 20 14:45 meson-private
-rw-r--r--. 1 root root  808 Sep 20 14:45 .ninja_deps
-rw-r--r--. 1 root root  150 Sep 20 14:45 .ninja_log
气吹
c.构建加载三⽅库的可执⾏项⽬
project03
├── meson.build
└── src
├── include
ccc360│└── third_lib.h
├── main.c
└── third
└── libthirdinfo.a
此处⽤的静态库和头⽂件来⾃上⼀步的构建结果。
main.c:
#include <stdio.h>
#include "third_lib.h"
int main(void)反应烧结碳化硅
{
printf("hellow project03\n");
info_print();
return 0;
}
meson.build:
project('project03', 'c')
_compiler('c').find_library('thirdinfo', dirs : join_paths(meson.source_root(),'src/third')) executable('project03', 'src/main.c', dependencies : libs, include_directories : 'src/include')
构建编译之后:
[root@localhost build]# ls -al
total 28
drwxr-xr-x. 6 root root  184 Sep 20 16:34 .
drwxr-xr-x. 4 root root    49 Sep 20 16:34 ..
-rw-r--r--. 1 root root  2774 Sep 20 16:34 build.ninja
-rw-r--r--. 1 root root  368 Sep 20 16:34 compile_commands.json
drwxr-xr-x. 2 root root  264 Sep 20 16:34 meson-info
drwxr-xr-x. 2 root root    27 Sep 20 16:34 meson-logs
drwxr-xr-x. 2 root root  207 Sep 20 16:34 meson-private
-rw-r--r--. 1 root root  800 Sep 20 16:34 .ninja_deps
-rw-r--r--. 1 root root  135 Sep 20 16:34 .ninja_log
-rwxr-xr-x. 1 root root 10144 Sep 20 16:34 project03
drwxr-xr-x. 2 root root    26 Sep 20 16:34 project03.p
[root@localhost build]# ./project03
hellow project03
hellow third library
下篇预告:Meson 命令⾏和句法

本文发布于:2024-09-22 15:51:08,感谢您对本站的认可!

本文链接:https://www.17tex.com/tex/4/342283.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:构建   系统   编译   部分   安装
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议