[cross-compiling] “./configure”옵션 “–build”, “–host”및 “–target”의 차이점은 무엇입니까?

이 스크립트는 ./configure3 가지 옵션을 받아 --build, --host하고 --target. 나는 그들의 역할을 헷갈 리고있다. 그것들의 차이점과 의미는 무엇입니까?



답변

에서 언급 한 바와 같이 이 블로그 게시물 과에 언급 GCC 구성 이용 약관 , --target당신이 툴체인을 컴파일하는 경우에만 적용됩니다. 라이브러리 또는 바이너리의 일반적인 교차 컴파일을 수행 할 때

--build=the architecture of the build machine
--host=the architecture that you want the file to run on

그러나 당신 툴체인 구축 상황이 더 복잡해질 수 있습니다. 다음이 정확하다고 생각합니다 (교차 디버거를 수동으로 컴파일했다고 말할 수는 없지만).

다음이 있다고 가정 해 보겠습니다.

  • 모든 컴파일을 수행 할 powerpc 빌드 머신
  • 코드가 실행될 mips 프로세서가있는 여러 임베디드 장치
  • 현장에서 이러한 장치를 디버깅하는 데 사용할 x86 노트북

임베디드 장치에서 실행할 디버깅 서버 (예 : gdbserver)를 구성하고 빌드합니다.

./configure --build=powerpc --host=mips

임베디드 장치에 연결하고 “gdbserver : 1234 a.out”을 실행하여 디버깅을 시작하고 포트 1234에서 수신 할 수 있도록합니다.

그런 다음 디버깅 클라이언트 (gdbserver에 연결하고 제어)를 다음과 같이 빌드합니다.

./configure --build=powerpc --host=i686 --target=mips

a.out 프로그램을 디버그하기 위해 현장에서 “gdbclient embedded.device : 1234″를 실행할 수 있도록 x86 랩탑에 복사합니다.

이 모든 것은 위의 GCC 링크 나 캐나다 크로스 컴파일에 대한이 섹션을보고 싶은 컴파일러에도 적용됩니다 .

또한 이 Autoconf 매뉴얼 페이지에 따르면 “target은 host, host to build, build to the result of config.guess” 에 따라 지정된 빌드, 호스트 또는 대상이 표시되지 않을 수도 있습니다 .

한마디로의 코드를 구축 --build, 그것을 실행 --host--target아키텍처 환경을 제공합니다.


답변

참고 : 인수 --target는 컴파일러 (예 : GCC)를 빌드 할 때만 의미가 있습니다. configureGCC를 빌드하기 전에 실행할 때 :

  • --build: 당신이 만들고있는 기계
  • --host: 당신이 만드는 기계
  • --target: GCC가 바이너리를 생성 할 머신

로부터 GCC 문서 ( 호스트 / 대상 특정 설치 정보 ) :

빌드, 호스트 및 대상이 모두 동일한 경우이를 네이티브라고합니다. 빌드와 호스트가 동일하지만 대상이 다른 경우이를 교차라고합니다. 빌드, 호스트 및 대상이 모두 다른 경우이를 캐나다인이라고합니다 (캐나다의 정당과 당시 빌드 작업을하는 사람의 배경을 다루는 모호한 이유 때문에). 호스트와 대상이 동일하지만 빌드가 다른 경우 크로스 컴파일러를 사용하여 다른 시스템에 대한 네이티브를 빌드하는 것입니다. 어떤 사람들은 이것을 호스트 x 호스트, 교차 네이티브 또는 교차 빌드 네이티브라고 부릅니다. 빌드와 대상이 동일하지만 호스트가 다른 경우 크로스 컴파일러를 사용하여 빌드중인 머신의 코드를 생성하는 크로스 컴파일러를 빌드하는 것입니다. 이것은 드문 경우이므로 일반적인 설명 방법이 없습니다. 이것을 크로스 백이라고 부르는 제안이 있습니다.


답변