所以我现在正在 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
命令以获取更多信息。fg
bg
我意识到这可能是一个无限循环,但我本来可以用 来杀死它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
目录,因此我将调用它成功。