如何在 Meson 项目中包含树外资源?

问题描述

一些背景:我将 Meson 用于嵌入式 C 项目。我让它工作 (example),但它不是很干净。

我想解决的具体问题是包含一个树外支持包 (BSP) - 一个文件和 C 文件的树,用作特定的初始化和抽象代码平台。

以前,我一直根据需要将标头从供应商提供的 BSP 复制到我的项目中,这确实有效,但这样做有缺点,最重要的是缺乏可重复性。此外,它会导致代码重复,并且如果错误在 BSP 中,则很难跟踪特定错误的来源。

我尝试过的方法是:

  1. 使用 meson_options.txt 中的选项通过 meson configure 告诉 Meson BSP 在磁盘上的位置。这种方法的问题是Meson在安装过程中抛出一个错误,因为在安装完成之前无法设置选项,因此它找不到必要的目录并拒绝继续。

  2. 使用子项目并重复上述操作 - 这会导致相同的问题。

理想情况下,我希望最终用户能够使用 meson configure 设置 BSP 路径,而不必编辑构建描述(Meson 的全部意义在于用户友好!)。

这可能吗?如果不可能,为什么,以及是否有我应该了解的替代方法/常用做法?

解决方法

在您的问题中,您声明

设置完成后才能设置选项

这不是真的。您可以使用以下语法在介子设置期间传递您想要的任何选项:

$ meson <build dir> -D<option>=<value>

所以我认为您尝试实现选项的第一种方法是正确的,您只需要在设置过程中告诉用户直接设置即可。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...