젠투 시스템을 업데이트할 때 포티지는 새 소스를 가져와서 추출하고 모든 것을 처음부터 다시 컴파일합니까, 아니면 기존 소스로 추출하고 변경된 파일만 컴파일합니까?
답변1
많은 빌드 시스템(예: autotools)은 증분 컴파일을 지원 하지만 make(1)
포티지가 포함된 젠투는 이를 활용하지 않습니다. 패키지가 컴파일되고 설치된 후 작업 디렉터리는 삭제됩니다.
증분 컴파일을 사용할 때의 실질적인 어려움은 이러한 방식으로 패키지를 안정적으로 구축하는 것입니다. 항상 클린 빌드를 수행한다면 빌드가 성공적이고 정확하며 재현 가능한지 확인하는 것이 더 쉽습니다. 젠투가 증분 재구축을 지원하려고 하면 많은 빌드 시스템이 미묘하게 중단될 것입니다. 또한 대부분의 경우 생성된 에 ./configure
새 환경 변수나 업데이트된 환경 변수를 생성할 수 있는 재실행 (또는 이에 상응하는 것)이 필요합니다 config.h
(예: CFLAGS
및 (또는 다른 빌드 시스템을 사용하는 경우 이에 상응하는 것)). 터치를 사용하려면 대부분의 소스를 재구성해야 합니다. 변경이 발생하면 패키지가 사용되지 않으면 모든 소스가 via를 통해 전달될 수 있습니다.CPPFLAGS
Makefile
config.h
PACKAGE_VERSION
Makefile
CPPFLAGS
config.h
~해야 한다새로운 값을 보려면 다시 빌드하세요. 일부 소스 파일이 특정 C 전처리기 매크로를 참조하지 않기 때문에 다시 컴파일할 필요가 없다고 가정할 수 없다면 말이죠.
따라서 궁극적으로 Gentoo 개발자가 패키지 버전 업데이트 간의 증분 컴파일을 지원하기 위해 많은 노력을 기울임에도 불구하고 많은 패키지는필요완전히 재컴파일되거나 make(1)
결국 완전히 재컴파일됩니다(예: config.h
타임스탬프가 변경되는 경우). 따라서 이는 매우 미미한 이점만 갖고 비용이 많이 드는 작업이 될 수 있으며 심지어많은~의미묘한 오류, 최선을 다해 이해하겠습니다. 그래서 저는 그런 기능을 소개하고 싶지 않습니다.
내 대답은 주로 autotools/simple 유형 패키지를 언급 Makefile
하지만 모든 것이 그런 식으로 구축되는 것은 아니므로 정확한 이유는 문제의 정확한 패키지에 따라 다를 수 있습니다.
답변2
포티지는 업스트림에서 제공되는 새 패키지의 전체 소스 코드를 컴파일합니다(때로는 젠투 팀이 소스 코드 자체를 패치하지만 이는 또 다른 이야기입니다).
이전 패키지의 바이너리는 일반적으로 제거되지만 일부 이전 라이브러리는 제거하면 다른 패키지에 해를 끼칠 수 있습니다. 이전 소스를 삭제하려면 eclean -d distfiles
직접 실행해야 합니다.