我試圖將項目切換到meson
/ninja
,但需要多次執行ninja
才能成功完成,初看起來早期故障是由於應該在它之前完成不完整的構建步驟。看起來不按順序的步驟通常是在我調用sed
到custom_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: '[email protected]@.vapi'.format(apiversion),
vala_gir: '[email protected]@.gir'.format(apiversion),
dependencies: lib_b_deps,
c_args: lib_b_args,
soversion: soversion,
install: true,
install_dir: [ true, true, true, false ],
)
custom_target('[email protected]@.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="[email protected]@"/>|<include name="LibA" version="@[email protected]"/><package name="[email protected]@"/>|'.format(apiversion),
join_paths(meson.current_build_dir(), '[email protected]@.gir'.format(apiversion)),
],
output: '[email protected]@.gir'.format(apiversion),
capture: true,
install: true,
install_dir: dir_gir,
)
if g_ir_compiler.found()
custom_target('[email protected]@.typelib'.format(apiversion),
command: [ g_ir_compiler,
'--shared-library', lib_b.full_path(),
'--includedir', lib_a_girdir,
'--output', '@[email protected]',
join_paths(meson.current_build_dir(), '[email protected]@.gir'.format(apiversion)),
],
output: '[email protected]@.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
設置移植,但是工作起來很慢。
嗯,似乎沒有必要使用'gnome'模塊時'valac'輸出'gir'直接。我反正試過了,'gnome.generate_gir'不會輸出一個可以用作另一個'custom_target'輸入的文件。當我編譯時,我得到'src/lib/b/LibB-1.0.gir'所需的'src/lib/b/Lib-1.0.gir'的錯誤,缺少並且沒有已知的規則來創建它。也許這樣做是錯誤的,我正在嘗試使用'meson',但我會爭辯說我應該能夠在編譯器生成的文件上運行'sed | awk | whatever'。 – geoffjay
經過更多的搞亂之後,我覺得很自信地說,在一組Vala源代碼中調用'gnome.generate_gir'不起作用。您需要Vala來生成構建自檢文件時包含的頭文件,而'g-ir-scanner'顯然不會將Vala文件作爲輸入。所以你需要'valac'來生成'gir'文件。不幸的是,它看起來像手動生成比使用介子更容易。 – geoffjay
抱歉忽略了它是瓦拉的事實。儘管如此,可能會討論支持輸出吉爾。 – TingPing