使用meson / ninja构建需要多次执行才能完成

时间:2017-08-10 00:11:53

标签: ninja meson-build

我尝试将项目切换到meson / ninja,但需要多次执行ninja才能成功完成,乍一看似乎是早期的失败是因为应该在它之前的不完整的构建步骤。看起来乱序的步骤通常是我在调用sedcustom_target时修复一些自动生成的输出,以修复依赖于库(lib-b)的库(lib-a)另一个(lib-b)。这基本上就是我所拥有的(lib_b = shared_library('lib-b-' + apiversion, lib_b_sources, link_args: [ '-Wl,--version-script' ], vala_header: 'lib-b.h', vala_args: lib_b_vala_args, vala_vapi: 'lib-b-@0@.vapi'.format(apiversion), vala_gir: 'Lib-@0@.gir'.format(apiversion), dependencies: lib_b_deps, c_args: lib_b_args, soversion: soversion, install: true, install_dir: [ true, true, true, false ], ) custom_target('LibB-@0@.gir'.format(apiversion), command: [ sed, '-e', 's|Lib[.]|LibB.|g', '-e', 's|namespace name="Lib"|namespace name="LibB"|g', '-e', 's|LibB[.]Foo|LibA.Foo|g', '-e', 's|<package name="lib-b-@0@"/>|<include name="LibA" version="@0@"/><package name="lib-b-@0@"/>|'.format(apiversion), join_paths(meson.current_build_dir(), 'Lib-@0@.gir'.format(apiversion)), ], output: 'LibB-@0@.gir'.format(apiversion), capture: true, install: true, install_dir: dir_gir, ) if g_ir_compiler.found() custom_target('LibB-@0@.typelib'.format(apiversion), command: [ g_ir_compiler, '--shared-library', lib_b.full_path(), '--includedir', lib_a_girdir, '--output', '@OUTPUT@', join_paths(meson.current_build_dir(), 'LibB-@0@.gir'.format(apiversion)), ], output: 'LibB-@0@.typelib'.format(apiversion), depends: lib_b, install: true, install_dir: dir_typelib, ) endif ):

ninja

首次运行FAILED: src/lib/b/LibB-1.0.gir /usr/bin/python3 /usr/bin/meson --internal exe /home/user/proj/_build/meson-private/meson_exe_sed_3429069bbdfaffa2d113b782ce02a55d5fd96973.dat /usr/bin/sed: can't read /home/user/proj/_build/src/lib/b/Lib-1.0.gir: No such file or directory 后,我收到这样的错误:

Lib-1.0.gir

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

如果ninja / autotools无法在一个必须先于另一个的序列中执行构建步骤,我会感到惊讶。我在这里做过一些粗暴/愚蠢的事吗?我基本上移植了一个有效的createExpensively()设置,但是是懒散的。

1 个答案:

答案 0 :(得分:0)

您必须将输出放入input的{​​{1}}关键字中,以便他们了解依赖关系并以正确的顺序运行。

此外,您应该使用gnome模块生成gir文件:http://mesonbuild.com/Gnome-module.html#gnomegenerate_gir

相关问题