最近工作中接触到了使用meson编译源码的方式,不同于以往的make/cmake,特此学习记录一下,也给没接触过的小伙伴做一点点参考。

一、什么是meson

Meson 旨在开发最具可用性和快速的构建系统。提供简单但强大的声明式语言用来描述构建。原生支持最新的工具和框架,如 Qt5 、代码覆盖率、单元测试和预编译头文件等。利用一组优化技术来快速变异代码,包括增量编译和完全编译。

二、安装meson

以ubuntu18.04.4为例:

注意:meson安装前必须确认是否已经安装python3.5及以上版本;因为meson依赖于python3和ninja
1、安装python3和ninja: sudo apt-get install python3 python3-pip ninja-build
2、切换至python3:
Ubuntu系统上一般默认安装了python2.7,因此如果安装了python3系统还是默认使用python2.7,因此需要切换至python3。
sudo rm /usr/bin/python3
sudo ln -s /usr/bin/python3.5 /usr/bin/python3
3、安装meson:pip3 install --user meson

三、使用meson

1、创建程序 test.c:

#include<stdio.h>int main(int argc,char **argv){printf("Hello meson!\n");return 0;
}

2、创建文件meson.build:

$ project('test','c')
$ executable('demo','test.c')

3、文件路径内容如下:

$ root@ZHP:~/meson_test# ls
$ meson.build  test.c

4、执行命令 meson build:

$ root@ZHP:~/meson_test# meson build
$ The Meson build system
$ Version: 0.45.1
$ Source dir: /root/meson_test
$ Build dir: /root/meson_test/build
$ Build type: native build
$ Project name: test
$ Native C compiler: cc (gcc 7.5.0 "cc (Ubuntu 7.5.0-3ubuntu1~18.04) 7.5.0")
$ Build machine cpu family: x86_64
$ Build machine cpu: x86_64
$ Build targets in project: 1
$ Found ninja-1.8.2 at /usr/bin/ninja
$ root@ZHP:~/meson_test#

此时目录下产生文件夹build:

$ root@ZHP:~/meson_test# ls
$ build  meson.build  test.c
$ root@ZHP:~/meson_test#

文件夹build内容:

$ root@ZHP:~/meson_test/build# ls
$ build.ninja  compile_commands.json  meson-logs  meson-private
$ root@ZHP:~/meson_test/build#

5、进入build文件夹,执行命令 ninja :

$ root@ZHP:~/meson_test/build# ninja
$ [2/2] Linking target demo.
$ root@ZHP:~/meson_test/build# ls
$ build.ninja  compile_commands.json  demo  demo@exe  meson-logs  meson-private
$ root@ZHP:~/meson_test/build#

ninja 相当于 make, 所以上面会编译代码,生成可执行文件 demo。

6、执行目标文件:

$ root@ZHP:~/meson_test/build# ./demo
$ Hello meson!
$ root@ZHP:~/meson_test/build#

四、编译开源代码

现在很多开源代码都转向meson进行构建和编译了,例如open5gs等等,可以在代码根目录下看到很多meson.build文件,并且每个子目录页包含meson.build文件 :

$ root@ZHP:~/open5gs# ls
$ build  configs  debian  docker  docs  install  lib  LICENSE  meson.build meson_options.txt  misc  README.md  src  subprojects  tests  vagrant  webui
$ root@ZHP:~/open5gs# ls src/
amf  ausf  bsf  hss  main.c  meson.build  mme  nrf  nssf  pcf  pcrf  sgwc  sgwu  smf  udm  udr  upf
$ root@ZHP:~/open5gs# ls src/upf/
app.c  arp-nd.cpp  arp-nd.h  context.c  context.h  event.c  event.h  gtp-path.c  gtp-path.h  init.c  meson.build  n4-build.c  n4-build.h  n4-handler.c  n4-handler.h  pfcp-path.c  pfcp-path.h  pfcp-sm.c  rule-match.c  rule-match.h  timer.c  timer.h  upf-sm.c  upf-sm.h
$ root@ZHP:~/open5gs#

编译过程为:

$ cd open5gs
$ meson build --prefix=`pwd`/install
$ ninja -C build

[推荐一个零声学院免费公开课程,个人觉得老师讲得不错,分享给大家:Linux,Nginx,ZeroMQ,MySQL,Redis,fastdfs,MongoDB,ZK,流媒体,CDN,P2P,K8S,Docker,TCP/IP,协程,DPDK等技术内容,点击立即学习:

meson编译C代码简单介绍及实例相关推荐

  1. Dubbo简单介绍及实例

    1.概念 Dubbo是一个分布式服务框架,以及阿里巴巴内部的SOA服务化治理方案的核心框架.其功能主要包含:高性能NIO通讯及多协议集成.服务动态寻址与路由.软负载均衡与容错,依赖分析与降级等. 说通 ...

  2. ResNet简单介绍+Pytroch代码实现

    文章目录 一.背景介绍 二.ResNet网络结构 1.ResNet34结构示意图 2.不同层数的ResNet采用的Block结构. 3.不同层数的ResNet网络结构示意图 4.实验结果 三.Pytr ...

  3. android 代码浏览,Webview实现android简单的浏览器实例代码

    WebView是Android中一个非常实用的组件,它和Safai.Chrome一样都是基于Webkit网页渲染引擎,可以通过加载HTML数据的方式便捷地展现软件的界面,下面通过本文给大家介绍Webv ...

  4. php django mysql配置文件_Mysql学习Django+mysql配置与简单操作数据库实例代码

    <Mysql学习Django+mysql配置与简单操作数据库实例代码>要点: 本文介绍了Mysql学习Django+mysql配置与简单操作数据库实例代码,希望对您有用.如果有疑问,可以联 ...

  5. [转载] python中pass的使用_Python pass详细介绍及实例代码

    参考链接: Python pass语句 Python pass详细介绍及实例代码 Python pass的用法: 空语句 do nothing 保证格式完整 保证语义完整 以if语句为例,在c或c++ ...

  6. mysql mongo关联查询语句_MySQL与Mongo简单的查询实例代码 筋斗云网络

    简介 本文通过一个实例给大家用MySQL和mongodb分别写一个查询,本文图片并茂给大家介绍的非常详细,感兴趣的朋友参考下吧 首先在这里我就不说关系型数据库与非关系型数据库之间的区别了(百度上有很多 ...

  7. html作品简介代码,HTML5的标签的代码的简单介绍 HTML5标签的简介

    HTML5的标签的代码的简单介绍 HTML5标签的简介 发布时间:2012-05-28 14:43:34   作者:佚名   我要评论 本文主要介绍了HTML5的标签.不同于以前的标签.更简单.更方便 ...

  8. redis详细介绍附实例代码--看一篇就够了

    自己开发了一个股票智能分析软件,功能很强大,需要的点击下面的链接获取: https://www.cnblogs.com/bclshuai/p/11380657.html redis介绍详解附实例代码- ...

  9. php mysql简单留言本_php+mysql写的简单留言本实例代码

    php+mysql写的简单留言本实例代码 更新时间:2008年07月25日 09:41:32   作者: 方便新手学习php guestbook.php: COLOR: #002878; TEXT-D ...

  10. JavaScript 引擎和 Just-in-Time 编译概念,Hot Function 的简单介绍

    原文:JavaScript engines and Just-In-Time compilation: A beginner's exploration, part 1 JavaScript 引擎本身 ...

最新文章

  1. NESPER的大体结构 z
  2. 计算机组成的基本硬件设备
  3. python threading模块的方法_Python THREADING模块中的JOIN()方法深入理解
  4. android 选座,机票在线选座 Android 开源库
  5. 2.项目管理重要性探讨
  6. pythonopencv目标检测_Python 使用Opencv实现目标检测与识别的示例代码
  7. nginx的反向代理、负载均衡、页面缓存、URL重写及读写分离
  8. LoadRunner 11安装Micosoft Visual C++ 2005 SP1时提示命令行选项语法错误
  9. 给iphone或touch加桌面图标
  10. VSCode解决中文乱码问题
  11. python openpose
  12. 记账本记录日常收支,使用图表查看项目
  13. 读书笔记 - 《天生就会跑》
  14. 「微服务网关实战三」详细理解 SCG 路由、断言与过滤器
  15. 智慧环卫管理系统实现环卫管理和决策的智慧化
  16. 卡巴斯基郑启良:支持信创发展是卡巴斯基的重要使命
  17. c++ 求四边形面积和周长_C++中运用类求一个矩形的面积和周长
  18. Silvaco学习笔记(十四)——获取器件特性(毕设相关)
  19. 问题 C: 总绩点计算
  20. 华为OD机试真题-相同数字的积木游戏 【2023.Q1】

热门文章

  1. torch.optim.SGD参数详解(除nesterov)
  2. 电脑word文档页眉的横线怎么去掉
  3. 有哪些好的科研工具软件?
  4. 新闻客户端纷纷内容化,微博却在强化新闻属性
  5. PPT 图表不显示对应类型的数据解决办法
  6. npm install xxxx --legacy-peer-deps命令是什么?
  7. 动态相关系数dcc_常相关系数(CCC)和动态条件相关系数(DCC)
  8. 实现微信小程序的分享转发功能(可以从分享页返回小程序首页)
  9. JavaScript登录界面制作
  10. 腾讯云联手腾讯安全玄武实验室,提供「应用克隆」漏洞免费检测服务