meson构建系统

简介

Meson是一个构建系统,它被设计成在不牺牲性能的前提下尽可能的友好。这方面的主要工具是用户用来描述构建结构的自定义语言。这种语言的主要设计目标是简单、清晰和简洁。很多灵感都来自于Python编程语言,它被认为是非常易读的,即使对以前没有使用Python编程的人来说也是如此。
另一个主要想法是为现代编程工具和最佳实践提供一流的支持。这些特性包括单元测试、代码覆盖报告、预编译头等等。所有这些功能应该立即可用的任何项目使用Meson。用户不应该需要寻找第三方宏或编写shell脚本来获得这些特性。它们应该是开箱即用的。
这种能力不应该以牺牲有限的实用性为代价。许多软件的构建需要非正统的步骤。一个常见的例子是,你首先需要建立一个自定义的工具,然后用这个工具来生成更多的源代码来构建。这种功能需要得到支持,并且要像系统的其他部分一样容易使用。

注:以上简介机翻自meson官网

简明使用

本部分针对那些基于meson build的项目,记录一些meson的基础命令

  • 编译项目

    • setup 1

      使用meson build的项目在源码根目录都能看到一个名为“meson.build”的文件,此文件规定了构建项目的规则

      在meson下要求要指定一个单独的build目录,这样在编译过程中产生的中间文件不会污染源代码目录,使用以下命令创建build目录并初始化编译

      meson build
      

      命令执行后会自动探测环境、探测编译器,创建一个名为“build”的构建目录,并生成后续compile所需要的文件,如下图所示

      image-20210427144017051

    • setup 2

      接下来就要comple项目了,对于meson版本>0.55.0的可以直接使用以下命令进行编译

      meson compile -C build
      

      对于低于此版本的meson使用以下命令进行编译

      ninja -C build
      
  • 编译时的一些选项

    meson默认编译出来的目标文件是release版本的,也就是没有debug信息,这样在项目开发时调试很麻烦,使用以下命令配置meson build debug版本的目标文件

    meson build --buildtype debug
    

    如果已经执行过meson的话使用上条命令会报错,使用以下命令重新配置

    meson build --buildtype debug --reconfigure
    

    buildtype 有以下几种

    valuemeaning
    plainno extra build flags are used, even for compiler warnings
    debug带有debug信息,没有优化
    debugoptimized带有debug信息,有优化
    release无debug信心,有优化

    在有些情况下需要自己添加一些gcc的flag,可以使用以下命令

    meson build -Dc_args=... -Dcpp_args=... -Dc_link_args=... -Dcpp_link_args=...
    
  • test、install

    对于有unit test的项目可以使用以下命令来运行test

    meson test -C build
    

    需要安装当前编译出来的项目可以使用以下命令,安装的目录可以在meson setup时指定

    meson build meson --prefix /usr
    meson compile -C build
    meson install -C build
    

    setup时忘了指定–prefix也可以使用以下命令来指定

    DESTDIR=/usr meson install -C build
    

编写meson构建脚本

待续

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/265736.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

射灯安装方法图解_江苏天筑不锈钢雕塑厂家格栅射灯安装方法,格栅射灯安装注意事项...

格栅射灯安装方法,您是否已经学会了呢?不管您会不会,今天江苏天筑不锈钢雕塑厂家就结合这个问题,一起来为大家详细介绍这部分内容的一些相关的注意事项,南方的天气比较潮湿,所以我们尽量不要把格栅射灯安装…

在centos8 stream启用 Extra Packages

前言 最近把一台机器装了centos8 stream,centos8 的维护周期将会在2021-12-31结束 而centos8 stream和centos8有什么区别呢?我参考官方的描述简单总结下 由下游变更到上游 centos8是RHEL的rebuild版本,所以是处在下游的,意思是收…

ARM体系结构简介 —— 迅为

目录单片机和ARM处理器内存管理单元(MMU)高速缓冲存储器(CACHE)指令集ARM的指令系统ARM处理器工作模式ARM处理器的内部寄存器ARM处理器的异常ARM中断向量ARM架构的发展单片机和ARM处理器 内存管理单元(MMU)…

getElementById() getElementsByName() getElementsByTagName()

http://www.cnblogs.com/winner/archive/2007/03/28/593028.html1、getElementById()getElementById()可以访问DOCUMENT中的某一特定元素,顾名思义,就是通过ID来取得元素,所以只能访问设置了ID的元素。比如说有一个DIV的ID为docid&#xff1a…

网口扫盲二:Mac与Phy组成原理的简单分析(转)

1. general 下图是网口结构简图.网口由CPU、MAC和PHY三部分组成.DMA控制器通常属于CPU的一部分,用虚线放在这里是为了表示DMA控制器可能会参与到网口数据传输中. 对于上述的三部分,并不一定都是独立的芯片,根据组合形式,可分为下列三种方案: CPU集成MAC与PHY;CPU集成MAC,PHY采用…

python拼接两个数组_在Python中连接两个数组

根据你的描述,你的案子看起来像:In [344]: a[np.arange(5),np.arange(5)]In [345]: b[np.arange(5),np.arange(3)]In [346]: aOut[346]: [array([0, 1, 2, 3, 4]), array([0, 1, 2, 3, 4])]In [347]: bOut[347]: [array([0, 1, 2, 3, 4]), array([0, 1, …

设置git协议clone代理

0x0 最近在clone yaffs2仓库时发现clone的异常缓慢,就算开了代理也是,搜索一番发现网上大多都是将设置http、https、ssh协议的代理,对于git协定的代理讲的很少,下面分享下如何让git协议走socks代理 以下内容前提是里已经在电脑上…

vue-cli 3.0安装和使用

零. 前言 公司最近开发项目使用的是vue-cli 3.0版本开发,但是对于vue-cli 3.0版本一直没有研究过如何使用,公司使用配置:pug ts stylus eslint;编辑器使用:vscode,使用起来简直不要太爽。 默认你已经安装…

lucene 入门整理

2019独角兽企业重金招聘Python工程师标准>>> 1. 概述 Lucene是一个全文检索引擎的架构,提供了完整的查询引擎和索引引擎。Lucene以其方便使用、快速实施以及灵活性受到广泛的关注。它可以方便地嵌入到各种应用中实现针对应用的全文索引、检索功能&am…

bits/libc-header-start.h: No such file or directory

问题描述 最近需要在debian 安装下arm和riscv的交叉工具链 sudo apt install gcc-10-riscv64-linux-gnu在安装完后使用交叉工具链编译东西时报错 orangepiorangepi4-lts:~/float-test$ riscv64-linux-gnu-gcc-10 float-cmov3.c -O2 -S In file included from float-cmov3.c:…

安卓APP开发基础

目录安卓工程构建第一个APP运行安卓的工程目录文件夹介绍安卓APP启动过程安卓布局控件布局的种类布局和页面的关系显示一张美女图显示两个美女常用布局之相对布局基础控件之Button,TextView,EditText,ImageView, padding和margin(内外边框)相对布局综合小演练-智能家居刷卡界面…

Dlib与OpenCV图片转换

re: 1. https://zhuanlan.zhihu.com/p/36489663 2. https://stackoverflow.com/questions/38180410/convert-rgb-image-to-grayscale-image-in-dlib End转载于:https://www.cnblogs.com/happyamyhope/p/9808837.html

idea怎么直接拉去git_如何将GitHub上面的项目拉取到IDEA中

上次,小喵给大家演示了一下,那么今天小喵给大家演示一下如何将GitHub上面的项目拉去到IDEA中.一 . 获取连接有两种情况 : 一种是项目未初始化 , 第二种是项目已初始化.未初始化 获取连接 :已初始化获取连接 :获得连接后我们就要去完成今天的目标啦!二 . 拉取项目到IDEA中GitHu…

jquery.ui.draggable中文文档jquery 自由拖拽类~study~

为什么80%的码农都做不了架构师?>>> JQuery UI Draggable插件用来使选中的元素可以通过鼠标拖动. Draggable的元素受影响css: ui-draggable, 拖动过程中的css: ui-draggable-dragging. 如果需要的不仅仅是拖, 而是一个完整的拖放功能, 请参阅JQue…

ubuntu蓝牙设备重连接慢

描述 我使用蓝牙鼠标和键盘连接到主机,操作系统是ubuntu 22 在使用过程中发现在主机或键盘休眠后 重连接速度很慢 解决方案 ubuntu 22 vim /etc/bluetooth/main.confFastConnectable true

序列(seq)

序列(seq) 题目描述 给定 N,A,BN,A,B,构造一个长度为 NN 的排列,使得: 排列长度为 N; 最长上升子序列长度为 A; 最长下降子序列长度为 B。 我们有 SPJ,有解任意给出一组,否则说明无解。 输入 第…

数据结构——二叉树先序、中序、后序及层次四种遍历(C语言版)

摘自:数据结构——二叉树先序、中序、后序及层次四种遍历(C语言版) 作者:正弦定理 发布时间:2020-12-09 17:08:48 网址:https://blog.csdn.net/chinesekobe/article/details/110874773?ops_request_misc%2…

js 获取td高度_JS或jQuery获取宽高度

javascript//网页可见区域宽: document.body.clientWidth //网页可见区域高: document.body.clientHeight //网页可见区域宽: document.body.offsetWidth (包括边线的宽) //网页可见区域高: document.body.offsetHeight (包括…

不重新编译DLL,让FCKEditor支持附件上传

最近在忙着做一个小项目,就是一个企业内部的论坛,其中最基本的一点就是富文本编辑帖子和回帖。目前市面上用的比较多的富文本编辑器有:FreeTextBox 一个有很多年历史的富文本编辑器了,使用简单,而且一般的使用是免费的…