问题标签 [meson-build]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
738 浏览

meson-build - 仅在使用 --default-library=shared 时添加编译器标志

介子构建系统允许使用选项构建共享库或静态库--default-library。但是,我无法知道是否正在构建共享库或静态库,我需要它来至少传递一个定义。有没有办法查询库类型?

这是我的猜测:

但显然我得到:

0 投票
2 回答
767 浏览

c - 如何在使用介子构建的 C 项目中使用 OpenMP

我对介子和C很陌生,如果这个问题的答案很琐碎,请原谅我......

我想在 C 项目中使用 OpenMP,并且我使用介子作为构建工具。
我想编译parallel for教程中的示例。我的main.c看起来很相似:

我的短meson.build文件包含以下内容:

c_args我在此处的调用中注释掉了关键字executable
现在我结束了以下场景:

  • 如果没有'-fopenmp'选项,我会收到警告,即pragma未知并将被忽略(如我所料):../src/main.c:15:0: warning: ignoring pragma omp parallel [-Wunknown-pragmas] #pragma omp parallel for
  • 插入选项c_args: '-fopenmp'后,我不再收到上述警告,而是收到未定义的对GOMP_parallel,omp_get_num_threads和引用的错误omp_get_thread_num,并且没有构建任何内容
  • 当我手动使用 gccgcc -Wall -o manually_with_gcc ../src/main.c -fopenmp程序编译并执行时没有任何错误。

谁能告诉我如何让可执行文件与介子一起编译?

0 投票
2 回答
3997 浏览

pkg-config - 在 meson.build 中设置 PKG_CONFIG_PATH

我在几个 C 项目(projectAprojectB)中使用介子,其中projectB链接到来自projectA. 在projectA/meson.build中,我pkg-config projectA.pc使用介子编写了一个文件,该文件join_paths(get_option('prefix'), get_option('libdir'), 'pkgconfig')按预期安装。

projectB/meson.builddependency('projectA')用来寻找projectA.pc文件。

当我使用自定义安装前缀构建projectAprojectB,构建时meson无法找到。有没有办法指定一个from ?projectA.pcprojectBPKG_CONFIG_PATHprojectB/meson.build

这个问题是用这个最小的例子重现的:

项目A/meson.build:

项目B/meson.build:

命令:

有没有办法告诉projectB/meson.build应该dependency()调查join_paths(get_option('prefix'), get_option('libdir'), 'pkgconfig')

我试图在介子dependency()调用中设置一个环境变量,但该env参数不存在dependency()

不幸的是env:,依赖项中的参数被忽略了(它在文档中不存在)。

将 ${prefix}/${libdir}/pkgconfig 目录从介子附加到 PKG_CONFIG_PATH 对我来说很有意义。有没有办法做到这一点?

0 投票
1 回答
469 浏览

ninja - 使用介子/忍者构建需要多次执行才能完成

我正在尝试将项目切换到meson/ninja但它需要多次执行ninja才能成功完成,乍一看,早期的失败似乎是由于应该在它之前的不完整的构建步骤。看起来乱序的步骤通常是在我调用一个sed通过来修复依赖于另一个库 ()custom_target的库 () 编译期间的一些自动生成的输出时。这基本上就是我对 ( ) 所拥有的:lib-blib-alib-b

第一次运行后,ninja我收到如下错误:

whereLib-1.0.gir应该是shared_library命令的输出之一。如果我再次运行它,它会创建文件,使其更进一步,并抱怨类似的错误。我再次运行它,这次更进一步,但依赖于未创建文件的其他内部项目出现错误。我最后一次运行它并完成。

如果meson/ninja不能按照一个必须先于另一个的顺序执行构建步骤,我会感到惊讶。我在这里做了什么恶心/愚蠢的事情吗?我基本上是在移植一个autotools有效的设置,但是很慢。

0 投票
1 回答
1051 浏览

assets - 介子处理数据/资产和可移植/相对路径

我想用Meson用 C++ 构建一个小游戏。假设这些是我的文件:

以下是meson.buid文件:

第二个文件:

在我的 C++ 代码中,我应该使用什么路径以可移植(相对?)方式(Windows、OS X、Linux)加载资产文件,因为我可能已经创建了捆绑应用程序或在系统文件层次结构 ?

当我ninja在构建目录中构建时,我还希望文件路径能够正常工作,而无需安装所有游戏数据。

我想DATA_PREFIX在编译时添加一个定义集,或者使用环境变量。

请参阅http://mesonbuild.com/Installing.htmlhttp://mesonbuild.com/Reference-manual.html#install_data

谢谢你。

0 投票
0 回答
191 浏览

meson-build - 如何使用介子编译 AIDL 文件?

这是2个aidl文件。

src/com/rom1v/example/Service.aidl

src/another/package/Other.aidl

我想用介子编译它们,所以我开始了build.meson

从这些来源,我想生成:

  • MYBUILDDIR/gen/com/rom1v/example/Service.java
  • MYBUILDDIR/gen/another/package/Other.java

要手动生成它们,我使用以下命令:

如何使用介子做同样的事情?

我猜generator是我想要的,但我不知道output要使用什么值(它不接受路径,只支持 @PLAINNAME@@BASENAME@作为替换)。

0 投票
2 回答
10088 浏览

c - MesonBuild:如何定义对`pkg-config`找不到的库的依赖关系?

我的项目(在 C 中)在构建时具有第三方依赖项。但是默认情况下,第三方库安装到/opt/而不是/lib,我无法在pkg-config. 从mesonbuild的文档中,我应该使用declare_dependency,我没有它的源代码来将其视为我的子项目。如果我dependency()用来定义它,我找不到正确的参数来定义自定义位置。

如何声明对非标准第三方库的依赖?

0 投票
1 回答
1222 浏览

gstreamer - 如何在介子构建中为 dirs 选项提供相关路径以查找第三方库?

我正在尝试构建具有第三方库依赖项的自定义 gst-plugin。

使用cc.find_librarydirs选项(采用绝对路径)我能够构建设置。

但我想包含相对路径,这样当其他人使用我的包时,他们不必更改任何内容,只需运行介子构建。有没有办法做同样的事情:添加/包含相对于目录中的搜索库?

0 投票
3 回答
968 浏览

meson-build - 介子可以读取文件的内容吗

介子是否可以将文件的内容读入数组或字符串?从这里可以将一个字符串拆分为一个数组,并且可以使用 循环一个数组foreach,但是我一直无法找到从文件中获取数据的方法。

0 投票
1 回答
716 浏览

c++ - 当许多目标使用相同的 C++ 源时,如何加快 Meson 构建

我有一个包含 58 个目标的新介子项目。其中许多使用相同的 *.cc 文件,meson 为每个目标构建每个 *.cc 文件一次,这比 autotools 慢得多。此外,目标之间的编译标志应该相同,因此理论上介子应该能够重用对象。

介子是否支持构建许多目标?这种情况有标准解决方案吗?我可以尝试将项目中的所有源代码组织到共享库中,但是我必须决定如何对它们进行分组,而使用自动工具我不必决定这一点。我还没有找到这方面的文档。

-奔日

PS这是一个最小的例子:

-------- 文件:app1.cc --------

------ 文件:meson.build -----

- - - - - 命令 - - - - - -


您应该会看到未使用参数“y”的警告出现两次。文件 compile_commands.json 也有两个 app1.cc 条目。