構建 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目錄,因此我將調用它成功。

相關內容