meson编译C代码简单介绍及实例
最近工作中接触到了使用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代码简单介绍及实例相关推荐
- Dubbo简单介绍及实例
1.概念 Dubbo是一个分布式服务框架,以及阿里巴巴内部的SOA服务化治理方案的核心框架.其功能主要包含:高性能NIO通讯及多协议集成.服务动态寻址与路由.软负载均衡与容错,依赖分析与降级等. 说通 ...
- ResNet简单介绍+Pytroch代码实现
文章目录 一.背景介绍 二.ResNet网络结构 1.ResNet34结构示意图 2.不同层数的ResNet采用的Block结构. 3.不同层数的ResNet网络结构示意图 4.实验结果 三.Pytr ...
- android 代码浏览,Webview实现android简单的浏览器实例代码
WebView是Android中一个非常实用的组件,它和Safai.Chrome一样都是基于Webkit网页渲染引擎,可以通过加载HTML数据的方式便捷地展现软件的界面,下面通过本文给大家介绍Webv ...
- php django mysql配置文件_Mysql学习Django+mysql配置与简单操作数据库实例代码
<Mysql学习Django+mysql配置与简单操作数据库实例代码>要点: 本文介绍了Mysql学习Django+mysql配置与简单操作数据库实例代码,希望对您有用.如果有疑问,可以联 ...
- [转载] python中pass的使用_Python pass详细介绍及实例代码
参考链接: Python pass语句 Python pass详细介绍及实例代码 Python pass的用法: 空语句 do nothing 保证格式完整 保证语义完整 以if语句为例,在c或c++ ...
- mysql mongo关联查询语句_MySQL与Mongo简单的查询实例代码 筋斗云网络
简介 本文通过一个实例给大家用MySQL和mongodb分别写一个查询,本文图片并茂给大家介绍的非常详细,感兴趣的朋友参考下吧 首先在这里我就不说关系型数据库与非关系型数据库之间的区别了(百度上有很多 ...
- html作品简介代码,HTML5的标签的代码的简单介绍 HTML5标签的简介
HTML5的标签的代码的简单介绍 HTML5标签的简介 发布时间:2012-05-28 14:43:34 作者:佚名 我要评论 本文主要介绍了HTML5的标签.不同于以前的标签.更简单.更方便 ...
- redis详细介绍附实例代码--看一篇就够了
自己开发了一个股票智能分析软件,功能很强大,需要的点击下面的链接获取: https://www.cnblogs.com/bclshuai/p/11380657.html redis介绍详解附实例代码- ...
- php mysql简单留言本_php+mysql写的简单留言本实例代码
php+mysql写的简单留言本实例代码 更新时间:2008年07月25日 09:41:32 作者: 方便新手学习php guestbook.php: COLOR: #002878; TEXT-D ...
- JavaScript 引擎和 Just-in-Time 编译概念,Hot Function 的简单介绍
原文:JavaScript engines and Just-In-Time compilation: A beginner's exploration, part 1 JavaScript 引擎本身 ...
最新文章
- NESPER的大体结构 z
- 计算机组成的基本硬件设备
- python threading模块的方法_Python THREADING模块中的JOIN()方法深入理解
- android 选座,机票在线选座 Android 开源库
- 2.项目管理重要性探讨
- pythonopencv目标检测_Python 使用Opencv实现目标检测与识别的示例代码
- nginx的反向代理、负载均衡、页面缓存、URL重写及读写分离
- LoadRunner 11安装Micosoft Visual C++ 2005 SP1时提示命令行选项语法错误
- 给iphone或touch加桌面图标
- VSCode解决中文乱码问题
- python openpose
- 记账本记录日常收支,使用图表查看项目
- 读书笔记 - 《天生就会跑》
- 「微服务网关实战三」详细理解 SCG 路由、断言与过滤器
- 智慧环卫管理系统实现环卫管理和决策的智慧化
- 卡巴斯基郑启良:支持信创发展是卡巴斯基的重要使命
- c++ 求四边形面积和周长_C++中运用类求一个矩形的面积和周长
- Silvaco学习笔记(十四)——获取器件特性(毕设相关)
- 问题 C: 总绩点计算
- 华为OD机试真题-相同数字的积木游戏 【2023.Q1】
热门文章
- torch.optim.SGD参数详解(除nesterov)
- 电脑word文档页眉的横线怎么去掉
- 有哪些好的科研工具软件?
- 新闻客户端纷纷内容化,微博却在强化新闻属性
- PPT 图表不显示对应类型的数据解决办法
- npm install xxxx --legacy-peer-deps命令是什么?
- 动态相关系数dcc_常相关系数(CCC)和动态条件相关系数(DCC)
- 实现微信小程序的分享转发功能(可以从分享页返回小程序首页)
- JavaScript登录界面制作
- 腾讯云联手腾讯安全玄武实验室,提供「应用克隆」漏洞免费检测服务