当前位置: 首页 > article >正文

认识meson 的使用

认识meson 的使用

Hi, 我是Hywelstar, 对于做过Linux 嵌入式的朋友都接触过Makefile, cmake 等这类, 但是对于meson可能接触不多,今天主要记录下关于meson 如何去编译,后续可能用上,首先需要知道的是Meson 是一个由 Python 实现的开源项目,绝妙的一句是:开发人员花费在构建调试上的每一秒都是浪费。

Meson 是一个现代的构建系统,设计用于速度和简便性,适用于各种规模的项目。以下是使用 Meson 构建项目的基本步骤和一些重要的概念。

1. 安装 Meson

  • 在 Ubuntu 上,你可以通过以下命令安装 Meson:
    sudo apt-get install meson
    

2. 设置构建目录

  • 使用 meson setup 命令设置构建目录。可以通过 --prefix 选项指定安装路径。
    meson setup builddir --prefix=/path/to/install
    
    • builddir 是你希望生成构建文件的目录。
    • --prefix 指定安装路径(例如 /usr/local 或者当前目录下的 _install 目录)。

3. 编译项目

  • 进入构建目录,并运行以下命令进行编译:
    meson compile -C builddir
    
    • -C 选项指定编译目录。

4. 安装项目

  • 编译完成后,使用以下命令将编译好的文件安装到指定的路径:
    meson install -C builddir
    
    • 这个命令会将文件安装到你在 --prefix 中指定的路径。

5. 重新配置项目

  • 如果需要更改配置,可以使用 meson setup --reconfigure 来更新构建目录的配置。
    meson setup --reconfigure builddir --prefix=/new/path
    

6. 重要概念

  • meson.build 文件: 每个项目的构建脚本文件,定义了项目的依赖、编译选项、安装目标等。
  • subprojects 目录: 可以包含项目的子模块或依赖项目,通常通过 wrap 文件来管理。
  • pkg-config: 用于查找依赖库的工具,Meson 会自动处理大部分的依赖查找。
  • gobject-introspection: 如果项目中需要生成 GObject 类型库的绑定,Meson 会自动处理这些绑定的生成。

7. 自定义安装路径

  • 通过 --prefix 可以指定项目安装的根目录。例如:
    meson setup builddir --prefix=/home/user/custom_install
    
  • 然后在编译和安装后,所有生成的文件都会安装在 /home/user/custom_install 路径下的相应目录中。

8. Debug/Release 配置

  • Meson 支持不同的构建类型,如 debugrelease,可以通过 --buildtype 选项指定:
    meson setup builddir --buildtype=release
    

9. 生成和使用编译缓存

  • 使用 ccache 来加速编译,Meson 支持 ccache 的自动检测和使用,可以通过设置环境变量 CCCXX 来启用:
    export CC='ccache gcc'
    export CXX='ccache g++'
    

10. 交叉编译配置

[host_machine]
system = 'linux'
cpu_family = 'arm'
cpu = 'armv7'
endian = 'little'

[binaries]
c = '/path/to/arm-linux-gnueabihf-gcc'
cpp = '/path/to/arm-linux-gnueabihf-g++'
pkgconfig = '/path/to/arm-linux-gnueabihf-pkg-config'

参考:

官网:

The Meson Build system


http://www.kler.cn/news/293426.html

相关文章:

  • 卷积神经网络(一)
  • 大端模式和小端模式
  • linux安装composer
  • 关于Vscode的vscode-cpptools中的icph占用c盘内存过大问题
  • 分享一个使用智狐联创AI平台创建的WordPress分类广告插件
  • GDB快捷键问答之04 怎样查看内存块
  • 【学术会议征稿】2024年第十届机械制造技术与工程材料国际学术会议(ICMTEM 2024)
  • Datawhale X 李宏毅苹果书 AI夏令营 入门 Task3-机器学习框架
  • Java - 通过枚举避免大量 if-else
  • 目标检测常见数据集格式
  • 海思Hi3516CV610 超高清智慧视觉 SoC
  • Linux df命令详解,Linux查看磁盘使用情况
  • 【JavaScript】从作用域角度理解闭包
  • 【AIGC半月报】AIGC大模型启元:2024.09(上)
  • 实际开发中git在IDEA中的使用
  • 机器学习之实战篇——MNIST手写数字0~9识别(全连接神经网络模型)
  • UDP通信实现
  • windows下安装elasticSearch和kibana
  • 报错:CPU指令集的问题
  • Nest.js 实战 (十一):配置热重载 HMR 给服务提提速
  • 鸿蒙界面开发——组件(6):属性字符串(StyledString)文本输入
  • Linux_kernel移植uboot07
  • 单例模式singleton
  • C#基础(2)枚举
  • 工作流之Activiti7 和BPMN讲解
  • Elastic Stack--ES集群加密及Kibana的RBAC实战
  • 报错:Reached the max session limit(DM8 达梦数据库)
  • 【C语言】---- 复合数据类型之结构体(Struct)
  • 期权虚值和实值的投资风险有什么不同?
  • docker 安装mongoDB