“./configure”옵션“--build”,“--host”및“--target”의 차이점은 무엇입니까?
이 스크립트는 ./configure
3 가지 옵션을 받아 --build
, --host
하고 --target
. 나는 그들의 역할을 혼동하고 있습니다. 그것들의 차이점과 의미는 무엇입니까?
에서 언급 한 바와 같이 이 블로그 게시물 과에 언급 GCC 구성 이용 약관 , --target
당신이 툴체인을 컴파일하는 경우에만 적용됩니다. 라이브러리 또는 바이너리의 정상적인 크로스 컴파일을 할 때
--build=the architecture of the build machine
--host=the architecture that you want the file to run on
그러나 툴체인 을 구축 할 때 상황이 더욱 복잡해질 수 있습니다. 나는 다음이 맞다고 생각한다 (그러나 나는 크로스 디버거를 수동으로 컴파일했다고 말할 수는 없다) :
당신이 가지고 있다고 말할 수 있습니다 :
- 모든 컴파일을 수행 할 powerpc 빌드 머신
- 코드가 실행될 밉 프로세서가있는 여러 임베디드 장치
- 현장에서 이러한 장치를 디버깅하는 데 사용할 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 매뉴얼 페이지에 따르면 "대상은 기본적으로 호스트, 호스트는 빌드 및 config.guess의 결과로 빌드 됨"으로 인해 실제로 빌드, 호스트 또는 대상이 지정되어 있지 않을 수도 있습니다 .
한마디로의 코드를 구축 --build
, 그것을 실행 --host
과 --target
아키텍처 환경을 제공합니다.
참고 : 인수 --target
는 컴파일러 (예 : GCC)를 빌드 할 때만 의미가 있습니다. configure
GCC를 빌드하기 전에 실행할 때 :
--build
: 구축중인 기계--host
: 당신이 만드는 기계--target
: GCC가 바이너리를 생성하는 머신
로부터 GCC 문서 ( 호스트 / 대상 특정 설치 정보 ) :
빌드, 호스트 및 대상이 모두 동일한 경우이를 기본이라고합니다. 빌드와 호스트가 동일하지만 대상이 다른 경우이를 크로스라고합니다. 빌드, 호스트 및 대상이 모두 다르면 캐나다라고합니다 (캐나다 정당과 당시의 빌드 작업을 수행 한 사람의 배경을 모호한 이유로 처리). 호스트와 대상이 동일하지만 빌드가 다른 경우 크로스 컴파일러를 사용하여 다른 시스템에 대한 기본을 빌드합니다. 어떤 사람들은 이것을 호스트 x 호스트, 교차 네이티브 또는 교차 빌드 네이티브라고 부릅니다. 빌드와 대상이 동일하지만 호스트가 다른 경우 크로스 컴파일러를 사용하여 빌드중인 시스템에 대한 코드를 생성하는 크로스 컴파일러를 빌드합니다. 이것은 드물기 때문에이를 설명하는 일반적인 방법은 없습니다. 이것을 크로스 백이라고하는 제안이 있습니다.
'program tip' 카테고리의 다른 글
Facebook 로그인 메시지 : "URL 차단됨 : 리디렉션 URI가 앱의 클라이언트 OAuth 설정에 허용되지 않기 때문에이 리디렉션에 실패했습니다." (0) | 2020.08.04 |
---|---|
장고를위한 최고의 AJAX 라이브러리는 무엇입니까? (0) | 2020.08.04 |
함수 반환 값에 std :: move를 언제 사용해야합니까? (0) | 2020.08.04 |
문자열 리터럴 앞에 "r"이 무엇입니까? (0) | 2020.08.04 |
재정의 할 때 super () 메서드를 호출하지 않아야 할 때? (0) | 2020.08.04 |