
所以我現在正在 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
目錄,因此我將調用它成功。