提问人:patrik 提问时间:10/2/2023 更新时间:10/9/2023 访问量:24
如何找出忍者失败的子命令?
How to find out what sub command that fails with ninja?
问:
我正在尝试用介子建立 glib。使用介子的原因仅仅是因为这是 glib 支持的,但我对此还没有太多经验。glib 项目也使用 ninja 进行构建。所以我下载了 https://download.gnome.org/sources/glib/ 并尝试构建项目(由于防火墙问题,也被迫下载 pcre 并单独构建)。最新版本 2.78.0 缺少一些文件,因此介子设置步骤失败。因此,我下载了 2.77.3(以及后来的 2.76.5)并运行
meson setup _build
meson compile -v -C _build
但这失败了
...
[127/1441] cc -o glib/libglib-2.0.so.0.7600.5 glib/libglib-2.0.so.0.7600.5.p/deprecated_gallocator.c.o glib/libglib-2.0.so.0.7600.5.p/deprecated_gcache.c.o glib/libglib-2.0.so.0.7600.5.p/deprecated_gcompletion.c.o glib/libglib-2.0.so.0.7600.5.p/deprecated_grel.c.o glib/libglib-2.0.so.0.7600.5.p/deprecated_gthread-deprecated.c.o glib/libglib-2.0.so.0.7600.5.p/garcbox.c.o glib/libglib-2.0.so.0.7600.5.p/garray.c.o glib/libglib-2.0.so.0.7600.5.p/gasyncqueue.c.o glib/libglib-2.0.so.0.7600.5.p/gatomic.c.o glib/libglib-2.0.so.0.7600.5.p/gbacktrace.c.o glib/libglib-2.0.so.0.7600.5.p/gbase64.c.o glib/libglib-2.0.so.0.7600.5.p/gbitlock.c.o glib/libglib-2.0.so.0.7600.5.p/gbookmarkfile.c.o glib/libglib-2.0.so.0.7600.5.p/gbytes.c.o glib/libglib-2.0.so.0.7600.5.p/gcharset.c.o glib/libglib-2.0.so.0.7600.5.p/gchecksum.c.o glib/libglib-2.0.so.0.7600.5.p/gconvert.c.o glib/libglib-2.0.so.0.7600.5.p/gdataset.c.o glib/libglib-2.0.so.0.7600.5.p/gdate.c.o glib/libglib-2.0.so.0.7600.5.p/gdatetime.c.o glib/libglib-2.0.so.0.7600.5.p/gdir.c.o glib/libglib-2.0.so.0.7600.5.p/genviron.c.o glib/libglib-2.0.so.0.7600.5.p/gerror.c.o glib/libglib-2.0.so.0.7600.5.p/gfileutils.c.o glib/libglib-2.0.so.0.7600.5.p/ggettext.c.o glib/libglib-2.0.so.0.7600.5.p/ghash.c.o glib/libglib-2.0.so.0.7600.5.p/ghmac.c.o glib/libglib-2.0.so.0.7600.5.p/ghook.c.o glib/libglib-2.0.so.0.7600.5.p/ghostutils.c.o glib/libglib-2.0.so.0.7600.5.p/giochannel.c.o glib/libglib-2.0.so.0.7600.5.p/gkeyfile.c.o glib/libglib-2.0.so.0.7600.5.p/glib-init.c.o glib/libglib-2.0.so.0.7600.5.p/glib-private.c.o glib/libglib-2.0.so.0.7600.5.p/glist.c.o glib/libglib-2.0.so.0.7600.5.p/gmain.c.o glib/libglib-2.0.so.0.7600.5.p/gmappedfile.c.o glib/libglib-2.0.so.0.7600.5.p/gmarkup.c.o glib/libglib-2.0.so.0.7600.5.p/gmem.c.o glib/libglib-2.0.so.0.7600.5.p/gmessages.c.o glib/libglib-2.0.so.0.7600.5.p/gnode.c.o glib/libglib-2.0.so.0.7600.5.p/goption.c.o glib/libglib-2.0.so.0.7600.5.p/gpathbuf.c.o glib/libglib-2.0.so.0.7600.5.p/gpattern.c.o glib/libglib-2.0.so.0.7600.5.p/gpoll.c.o glib/libglib-2.0.so.0.7600.5.p/gprimes.c.o glib/libglib-2.0.so.0.7600.5.p/gqsort.c.o glib/libglib-2.0.so.0.7600.5.p/gquark.c.o glib/libglib-2.0.so.0.7600.5.p/gqueue.c.o glib/libglib-2.0.so.0.7600.5.p/grand.c.o glib/libglib-2.0.so.0.7600.5.p/grcbox.c.o glib/libglib-2.0.so.0.7600.5.p/grefcount.c.o glib/libglib-2.0.so.0.7600.5.p/grefstring.c.o glib/libglib-2.0.so.0.7600.5.p/gregex.c.o glib/libglib-2.0.so.0.7600.5.p/gscanner.c.o glib/libglib-2.0.so.0.7600.5.p/gsequence.c.o glib/libglib-2.0.so.0.7600.5.p/gshell.c.o glib/libglib-2.0.so.0.7600.5.p/gslice.c.o glib/libglib-2.0.so.0.7600.5.p/gslist.c.o glib/libglib-2.0.so.0.7600.5.p/gstdio.c.o glib/libglib-2.0.so.0.7600.5.p/gstrfuncs.c.o glib/libglib-2.0.so.0.7600.5.p/gstring.c.o glib/libglib-2.0.so.0.7600.5.p/gstringchunk.c.o glib/libglib-2.0.so.0.7600.5.p/gstrvbuilder.c.o glib/libglib-2.0.so.0.7600.5.p/gtestutils.c.o glib/libglib-2.0.so.0.7600.5.p/gthread.c.o glib/libglib-2.0.so.0.7600.5.p/gthreadpool.c.o glib/libglib-2.0.so.0.7600.5.p/gtimer.c.o glib/libglib-2.0.so.0.7600.5.p/gtimezone.c.o glib/libglib-2.0.so.0.7600.5.p/gtrace.c.o glib/libglib-2.0.so.0.7600.5.p/gtranslit.c.o glib/libglib-2.0.so.0.7600.5.p/gtrashstack.c.o glib/libglib-2.0.so.0.7600.5.p/gtree.c.o glib/libglib-2.0.so.0.7600.5.p/guniprop.c.o glib/libglib-2.0.so.0.7600.5.p/gutf8.c.o glib/libglib-2.0.so.0.7600.5.p/gunibreak.c.o glib/libglib-2.0.so.0.7600.5.p/gunicollate.c.o glib/libglib-2.0.so.0.7600.5.p/gunidecomp.c.o glib/libglib-2.0.so.0.7600.5.p/guri.c.o glib/libglib-2.0.so.0.7600.5.p/gutils.c.o glib/libglib-2.0.so.0.7600.5.p/guuid.c.o glib/libglib-2.0.so.0.7600.5.p/gvariant.c.o glib/libglib-2.0.so.0.7600.5.p/gvariant-core.c.o glib/libglib-2.0.so.0.7600.5.p/gvariant-parser.c.o glib/libglib-2.0.so.0.7600.5.p/gvariant-serialiser.c.o glib/libglib-2.0.so.0.7600.5.p/gvarianttypeinfo.c.o glib/libglib-2.0.so.0.7600.5.p/gvarianttype.c.o glib/libglib-2.0.so.0.7600.5.p/gversion.c.o glib/libglib-2.0.so.0.7600.5.p/gwakeup.c.o glib/libglib-2.0.so.0.7600.5.p/gprintf.c.o glib/libglib-2.0.so.0.7600.5.p/glib-unix.c.o glib/libglib-2.0.so.0.7600.5.p/gspawn.c.o glib/libglib-2.0.so.0.7600.5.p/giounix.c.o glib/libglib-2.0.so.0.7600.5.p/gjournal-private.c.o glib/libglib-2.0.so.0.7600.5.p/gthread-posix.c.o -Wl,--as-needed -Wl,--no-undefined -shared -fPIC -Wl,--start-group -Wl,-soname,libglib-2.0.so.0 -Wl,-rpath,/proj/wcdmaiov/epatrek/babeltrace/glib/pcre2-10.42-bin/lib -Wl,-rpath-link,/proj/wcdmaiov/epatrek/babeltrace/glib/pcre2-10.42-bin/lib glib/libcharset/libcharset.a -Wl,-z,nodelete -Wl,-Bsymbolic-functions -lm -lrt /proj/wcdmaiov/epatrek/babeltrace/glib/pcre2-10.42-bin/lib/libpcre2-8.so -Wl,--end-group -pthread
[128/1441] cc -Iglib/tests/cache.p -Iglib/tests -I../glib/tests -I. -I.. -Iglib -I../glib -D_FILE_OFFSET_BITS=64 -Wall -Winvalid-pch -Wextra -pedantic -std=gnu99 -O2 -g -D_GNU_SOURCE -fno-strict-aliasing -DG_DISABLE_CAST_CHECKS -Wmissing-field-initializers -Wnonnull -Wunused -Wno-unused-parameter -Wno-format-zero-length -Wno-variadic-macros -Werror=format=2 -Werror=init-self -Werror=missing-include-dirs -Werror=pointer-arith -Wstrict-prototypes -Wno-bad-function-cast -Werror=implicit-function-declaration -Werror=missing-prototypes -Werror=pointer-sign -pthread '-DG_LOG_DOMAIN="GLib"' -UG_DISABLE_ASSERT -MD -MQ glib/tests/cache.p/cache.c.o -MF glib/tests/cache.p/cache.c.o.d -o glib/tests/cache.p/cache.c.o -c ../glib/tests/cache.c
[129/1441] cc -Iglib/tests/bytes.p -Iglib/tests -I../glib/tests -I. -I.. -Iglib -I../glib -D_FILE_OFFSET_BITS=64 -Wall -Winvalid-pch -Wextra -pedantic -std=gnu99 -O2 -g -D_GNU_SOURCE -fno-strict-aliasing -DG_DISABLE_CAST_CHECKS -Wmissing-field-initializers -Wnonnull -Wunused -Wno-unused-parameter -Wno-format-zero-length -Wno-variadic-macros -Werror=format=2 -Werror=init-self -Werror=missing-include-dirs -Werror=pointer-arith -Wstrict-prototypes -Wno-bad-function-cast -Werror=implicit-function-declaration -Werror=missing-prototypes -Werror=pointer-sign -pthread '-DG_LOG_DOMAIN="GLib"' -UG_DISABLE_ASSERT -MD -MQ glib/tests/bytes.p/bytes.c.o -MF glib/tests/bytes.p/bytes.c.o.d -o glib/tests/bytes.p/bytes.c.o -c ../glib/tests/bytes.c
[130/1441] cc -Iglib/tests/bookmarkfile.p -Iglib/tests -I../glib/tests -I. -I.. -Iglib -I../glib -D_FILE_OFFSET_BITS=64 -Wall -Winvalid-pch -Wextra -pedantic -std=gnu99 -O2 -g -D_GNU_SOURCE -fno-strict-aliasing -DG_DISABLE_CAST_CHECKS -Wmissing-field-initializers -Wnonnull -Wunused -Wno-unused-parameter -Wno-format-zero-length -Wno-variadic-macros -Werror=format=2 -Werror=init-self -Werror=missing-include-dirs -Werror=pointer-arith -Wstrict-prototypes -Wno-bad-function-cast -Werror=implicit-function-declaration -Werror=missing-prototypes -Werror=pointer-sign -pthread '-DG_LOG_DOMAIN="GLib"' -UG_DISABLE_ASSERT -MD -MQ glib/tests/bookmarkfile.p/bookmarkfile.c.o -MF glib/tests/bookmarkfile.p/bookmarkfile.c.o.d -o glib/tests/bookmarkfile.p/bookmarkfile.c.o -c ../glib/tests/bookmarkfile.c
[131/1441] cc -Iglib/tests/array-test.p -Iglib/tests -I../glib/tests -I. -I.. -Iglib -I../glib -D_FILE_OFFSET_BITS=64 -Wall -Winvalid-pch -Wextra -pedantic -std=gnu99 -O2 -g -D_GNU_SOURCE -fno-strict-aliasing -DG_DISABLE_CAST_CHECKS -Wmissing-field-initializers -Wnonnull -Wunused -Wno-unused-parameter -Wno-format-zero-length -Wno-variadic-macros -Werror=format=2 -Werror=init-self -Werror=missing-include-dirs -Werror=pointer-arith -Wstrict-prototypes -Wno-bad-function-cast -Werror=implicit-function-declaration -Werror=missing-prototypes -Werror=pointer-sign -pthread '-DG_LOG_DOMAIN="GLib"' -UG_DISABLE_ASSERT -MD -MQ glib/tests/array-test.p/array-test.c.o -MF glib/tests/array-test.p/array-test.c.o.d -o glib/tests/array-test.p/array-test.c.o -c ../glib/tests/array-test.c
ninja: build stopped: subcommand failed.
patrik[babeltrace/glib/glib-2.76.5]$
然而,这几乎没有说明导致忍者失败的错误。知道如何找到导致忍者失败的事实错误吗?
我正在使用 ninja 1.9.0 和 meson 1.2.1。
BR
帕特里克
答:
2赞
ptomato
10/9/2023
#1
应打印错误。请注意,如果您正在运行多个并发作业(Ninja 默认执行),则该错误可能已经从终端上滚动,因为其他编译步骤的命令在它之后打印。
如果未打印任何错误,则可能意味着子命令失败,未打印任何错误。在这种情况下,您一次只能使用一个命令。这样,就可以清楚哪个命令失败了。-j1
评论