Perl을 구축하는 것은 내부 농담입니까, 아니면 이렇게 많은 `make` 호출이 필요합니까?

Perl을 구축하는 것은 내부 농담입니까, 아니면 이렇게 많은 `make` 호출이 필요합니까?

그래서 저는 지금 ARMv7 프로세서의 소스, Snapdragon S4의 Krait에서 Perl 버전 5.18.2를 구축하고 있는데 그러한 아키텍처에 대해 얼마나 많은 지원이 있는지 잘 모르겠습니다. 그런데 LFS 시스템을 구축하려고 합니다. 문제는 이틀 동안 Perl에 갇혀 있었다는 것입니다. CFLAGS 없이 CFLAGS를 사용하여 루트로 다른 사용자를 시도했는데 데비안 소스 버전 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

... 나는 시퀀스 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 From Scratch를 계속 진행하겠습니다. 아마도 처음부터 빌드를 구성할 때 시스템에 존재하는 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장에서 작성된 임시 도구용이고 테스트 슈트가 필요하지 않으며 일부 libs만 디렉토리에 복사하면 된다고 하므로 /tools이것을 호출하겠습니다. 성공.

관련 정보