构建 Perl 是一个内部笑话还是它应该需要这么多的“make”调用?

构建 Perl 是一个内部笑话还是它应该需要这么多的“make”调用?

所以我现在正在 ARMv7 处理器上从源代码构建 Perl 版本 5.18.2,在 Snapdragon S4 上构建一个 Krait,我不太确定这种架构有多少支持。顺便说一句,我正在尝试构建一个 LFS 系统。问题是我已经被 Perl 困住了两天。我尝试了不同的用户,例如 root、使用 CFLAGS、不使用 CFLAGS、Debian 源版本 5.16 和 5.18,但我总是陷入特定的构建步骤。

所以最后一次我决定注意那条消息:

==> Your Makefile has been rebuilt. <==
==> Please rerun the make command.  <==

或类似的东西。

所以我做了一个小for循环......

RET=$?; for i in `seq 10`; do if [ ! $RET -eq 0 ]; then echo " \

RETURN ${i} == ${RET} \

" && make; RET=$?; fi; done

...我从 seq 3 开始,果然在每一个之后似乎沿着建设取得进展。也就是说,它在不同的步骤失败,当我检查日志时,我看到它失败的最后一步成功,并且我看到相同的消息:

==> Your Makefile has been rebuilt. <==
==> Please rerun the make command.  <==

我浏览了 CPAN 上的构建说明,没有看到任何参考资料,也没有看到任何表明我应该经历这个的内容,所以它回避了这个问题。

这是某种内部笑话,还是我做错了什么?

答案1

好吧,所以我认为这条消息是在告诉我做正确的事情,尽管按照提示输入 make 超过 50 次(可能已经超过 100 次)似乎是不可行的,所以我之前写了这个小 while 循环我去睡觉了:

RET=$?; while [ ! $RET -eq 0 ]; do echo " \

RETURN == ${RET} \

"; make; RET=$?; done

并让它运行。我Ctrl+z这样做是为了在睡觉时停止工作,然后我常常fg 1在中午之后将其重新启动,因为这是我唯一的工作,对其他人来说可能有所不同,请研究和jobs命令以获取更多信息。fgbg

我意识到这可能是一个无限循环,但我本来可以用 来杀死它Ctrl-c。它似乎总是返回 2,所以也许测试while [ $RET -eq 2 ]; do会更理想。

令我惊讶的是,它以返回 0 结束,并显示以下消息:

make[1]: Leaving directory '/home/lfs/sources/perl/perl-5.18.2/x2p'

    Everything is up to date. Type 'make test' to run test suite.

现在我将继续从头开始学习 Linux。看起来也许当从头开始配置构建时,系统上存在的任何 makefile 都需要重新构建,所以我想说这是正常行为,即重复行为make,并不是所有东西都像“标准”GNU 一样构建程式。

希望这对将来的人有帮助。

更新:

这是测试套件的结果:

    Failed 10 tests out of 2247, 99.55% okay.
        ../cpan/CPANPLUS/t/03_CPANPLUS-Internals-Source.t
        ../cpan/Socket/t/socketpair.t
        ../cpan/Sys-Syslog/t/syslog.t
        ../cpan/Time-HiRes/t/alarm.t
        ../cpan/Time-HiRes/t/clock.t
        ../cpan/Time-HiRes/t/usleep.t
        ../dist/ExtUtils-Command/t/cp.t
        op/alarm.t
        op/sigdispatch.t
        op/sleep.t

99.55%成功,不错。

由于这是用于“Linux From Scratch”第 5 章中创建的临时工具,并且他们说不需要测试套件,并且我只需将一些库复制到该/tools目录,因此我将调用它成功。

相关内容