标签: meson-build

当构建类型为 debug 时,如何定义 DEBUG?

当构建类型以“debug”开头时,我想将“-DDEBUG”传递给 C++ 编译器,如下所示:

if meson.build_type().starts_with('debug')
  add_global_arguments('-DDEBUG', language : 'cpp')
endif
Run Code Online (Sandbox Code Playgroud)

但是没有meson.build_type(),所以我从介子那里收到此错误消息:

Meson encountered an error in file meson.build, line 5, column 23:
Unknown method "build_type" in object.
Run Code Online (Sandbox Code Playgroud)

如何获取构建类型?DEBUG或者在调试版本中是否有不同的定义方式?

meson-build

5
推荐指数
1
解决办法
1740
查看次数

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

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

meson-build

5
推荐指数
3
解决办法
754
查看次数

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

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

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

-BenRI

PS这是一个最小的例子:

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

int f(int x ,int y) {return x;}
int main() { return f(0,1);}
Run Code Online (Sandbox Code Playgroud)

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

project('app12','cpp')
executable('app1',['app1.cc'])
executable('app2',['app1.cc'])
Run Code Online (Sandbox Code Playgroud)

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

% meson . meson
% cd meson
% meson configure -Dwarning_level=3
% ninja
Run Code Online (Sandbox Code Playgroud)

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

c++ meson-build

5
推荐指数
1
解决办法
600
查看次数

Flatpak Meson 没有从 Gnome Builder 中找到 Vala 库

在 Linux 中,我在 Gnome Builder (3.26.4) 中使用 Meson (0.44.0) 作为将使用 Gee 和 GXml 的控制台程序。我的目的是在 Genie 中写这个。

当我在 Gnome Builder 中使用 Meson 时,它会失败,但使用 valac (0.38.8) 从命令行调用时会成功,如下所示:

valac --pkg=gtk+-3.0 --pkg=gee-0.8 --pkg=gxml-0.16 main.gs
Run Code Online (Sandbox Code Playgroud)

从上面看没有错误。我尝试使用 gee 和 gxml 设置 meson.build 作为依赖项,或者作为vala_args。同样的错误。

检查 pkg-config,我得到以下信息:

$ pkg-config --libs gxml-0.16
-L/usr/local/lib64 -lgxml-0.16 -lgio-2.0 -lxml2 -lgee-0.8 -lgobject-2.0 -lglib-2.0
$ pkg-config --libs gee-0.8
-lgee-0.8 -lgobject-2.0 -lglib-2.0
$ pkg-config --libs gee-1.0
-lgee -lgobject-2.0 -lglib-2.0
Run Code Online (Sandbox Code Playgroud)

也许我做错了什么。这是本地 meson.build 文件,后跟顶级 meson.build 和错误:

example_sources = [
  'main.gs'
]

example_deps …
Run Code Online (Sandbox Code Playgroud)

vala genie meson-build flatpak gnome-builder

5
推荐指数
1
解决办法
2942
查看次数

无法在 Meson 构建中使用 C++ `std::filesystem` 库

我正在尝试使用 Meson 构建系统构建一段使用新的 C++17 文件系统库的 C++ 代码。

这是meson.build涉及的文件:

if not compiler.has_header('filesystem')   # This is OK
    warning('The compiler has no <filesystem> header file')
endif

filesystem_dep = dependency('libc++fs', modules : ['filesystem'])

test_exe = executable('test', test_src,
                      include_directories : include_dirs,
                      dependencies : filesystem_dep
                     )
Run Code Online (Sandbox Code Playgroud)

如果使用 boost::filesystem 库,这应该是正确的语法:

filesystem_dep = dependency('boost', modules : ['filesystem'])
Run Code Online (Sandbox Code Playgroud)

如何指定我想要标准 C++ 库中包含的版本?这是我尝试过但没有成功的方法:'libc++fs'、'stdlib'、'stdc++'、'libc++'、'c++'、'c++17'。

这是我从 Meson 收到的错误消息:

src/meson.build:33:0: 错误: 未找到本机依赖项“libc++fs”

我目前使用的编译器是LLVM/clang。

c++ clang boost-filesystem meson-build

5
推荐指数
1
解决办法
2706
查看次数

Meson 选择了错误的编译器(GCC 而不是 clang)

我正在尝试将我的项目配置为使用 LLVM/clang++ 构建,但始终选择 GCC:

$ /opt/llvm/clang+llvm-7.0.1-x86_64-linux-gnu-ubuntu-18.04/bin/clang++ --version
clang version 7.0.1 (tags/RELEASE_701/final)
Target: x86_64-unknown-linux-gnu
Thread model: posix
InstalledDir: /opt/llvm/clang+llvm-7.0.1-x86_64-linux-gnu-ubuntu-18.04/bin
$ 
$ CC=/opt/llvm/clang+llvm-7.0.1-x86_64-linux-gnu-ubuntu-18.04/bin/clang++ meson ~/build
The Meson build system
Version: 0.49.1
Source dir: ~/source
Build dir: ~/build
Build type: native build
Project name: test
Project version: 0.1.0
Native C++ compiler: ccache c++ (gcc 6.3.0 "c++ (Debian 6.3.0-18+deb9u1) 6.3.0 20170516")
Build machine cpu family: x86_64
Build machine cpu: x86_64
Message: Compiler: GCC
Dependency threads found: YES 
Build targets in project: 2
Found ninja-1.8.2 …
Run Code Online (Sandbox Code Playgroud)

c++ gcc clang clang++ meson-build

5
推荐指数
1
解决办法
1万
查看次数

是否有与 CMake 的 CPack 类似/等效的介子工具?

我最近开始学习介子,我正在我的一个项目中测试切换到它(从CMake)。问题是我通常使用cpack来构建项目的包/安装程序,在搜索介子文档以查找类似于cpack 的内容后,我找不到任何东西。

要求/我目前使用cpack做什么

  • 单个脚本自动构建和打包二进制版本(如 deb、rpm、windows installer 等)
  • 与构建系统集成 - 自动选择目标,不需要重新定义安装逻辑或结构
  • 支持至少构建 deb 包和 windows 安装程序(不关心哪个)

有关于构建发布档案,然后使用脚本使用打包工具(例如inno)处理它们的信息。然而,这并不是我真正想要的,因为它比cpack更笨拙和不灵活(即,如果目录结构发生变化,我必须更改 3 个不同的脚本)。

最终我可以学习使用介子系统并手动编写打包脚本,毫无疑问这会让我成为一个更好的脚本编写者,但是,我很想知道是否有更好的方法来做到这一点,这在文档中没有公布,或者有一些非官方项目可以使该过程自动化。

编辑

包我的意思是像一个 deb 包 - 一个系统包管理器的包,而不是像柯南这样的包

c++ cpack meson-build

5
推荐指数
1
解决办法
340
查看次数

有没有办法在介子中使用柯南包?

我们可以在柯南中使用介子构建系统。但我找不到任何有关如何在 meson.build 中添加 conan 包作为依赖项的文档。在cmake中非常简单,我们可以简单地使用conan_cmake_run。我怎样才能在介子中做类似的事情?

meson-build conan

5
推荐指数
1
解决办法
2579
查看次数

无法使用 Meson 通过 MKL 安装 Scipy

我正在尝试使用 BLAS 的 MKL 实现安装 scipy 1.9.1,使用 pip 作为我的包管理器。对于 numpy,我可以这样做pip install numpy --no-binary numpy:使用 Scipy ( pip install scipy--no-binary scipy) 执行此操作失败并出现错误:

发现运行时依赖 openblas:NO(尝试过 pkgconfig 和 cmake)

../../scipy/meson.build:130:0:错误:找不到依赖项“OpenBLAS”,尝试了 pkgconfig 和 cmake

我不知道如何配置 scipy/meson 以使用特定版本的 BLAS,它总是寻找 OpenBLAS。旧版本的 scipy 可以使用环境变量或 site.cfg 设置以多种方式完成此操作,但新的 meson 构建系统不再支持此操作

有什么建议我可以如何使用特定的 BLAS 库(最好使用 pip)从源代码构建 scipy?

pip blas scipy intel-mkl meson-build

5
推荐指数
1
解决办法
5353
查看次数

无法在 C++ 项目上从 Meson 运行 Doxygen

我无法通过 Meson 的配置运行 Doxygen。

这是中的相关代码meson.build

doxygen = find_program('doxygen')
...
run_target('docs', command : 'doxygen ' + meson.source_root() + '/Doxyfile')
Run Code Online (Sandbox Code Playgroud)

成功找到了 doxygen 可执行文件:

找到程序 doxygen:是 (/usr/bin/doxygen)

但是,当启动时,我收到此错误消息:

[0/1] 运行外部命令文档。
无法执行命令“doxygen /home/project/Doxyfile”。文件未找到。
失败:介子文档

从命令行手动运行它可以工作:

/usr/bin/doxygen /home/project/Doxyfile
doxygen /home/project/Doxyfile
Run Code Online (Sandbox Code Playgroud)

我的meson.build配置有什么问题?

c++ configuration doxygen meson-build

4
推荐指数
1
解决办法
993
查看次数