configure 의 --build, --host, --target 뜻
configure 의 --build, --host, --target 은 크로스 컴파일을 할 때 쓰인다. 크로스 컴파일이란 컴파일하고 있는 OS/기계와 컴파일 후 만들어진 바이너리가 실행하는 OS/기계가 다른 경우를 말한다. build, host, target 의 관계에 따라 몇 가지 용어가 있지만, 여기서는 그냥 넘어가자. 크로스 컴파일 자체에 대한 설명이 목적은 아니니까... 그래도 알고 싶은 사람은 여기를 보자.
그럼 이제, --build, --host, --target 의 뜻을 살펴보자.
--build 와 --host 는 금방 알 수 있을 것이라 생각한다. 하지만 --target 의 경우에는 다소 헛갈린다. 실제로도 --target 의 경우는 거의 쓰이지 않는다. 대체로 gcc 같은 툴체인을 컴파일할 때 주로 쓰인다.
몇 가지를 예를 들어보자. 윈도에서 많이 사용되는 GNU 툴체인인 mingw 의 경우, 리눅스용 크로스 컴파일러를 제공한다. 이를 이용하면 리눅스에서 윈도용 바이너리를 만들어낼 수 있다. 이 때 사용하는 configure 옵션의 예는 다음과 같다.
i686-w64-mingw32 는 host triplet(CPU-VENDOR-OS) 으로 32 비트용 윈도용 프로그램(i686)을 mingw-w64(w64) 툴체인으로 만든다는 뜻이다.
만약, 윈도에서 실행되지만, ARM 용 바이너리를 만들어내는 바이너리를 인텔용 32비트 리눅스에서 만들고자 한다면, configure 옵션은 이런 모습이 될 것이다.
사용된 옵션들의 뜻을 정리하면 이렇다.
이제는 --build, --host, --target 을 헛갈리지 말자.
그럼 이제, --build, --host, --target 의 뜻을 살펴보자.
- --build : 컴파일하고 있는 OS/기계
- --host : 컴파일해서 만들어진 바이너리가 실행되는 OS/기계
- --target: 컴파일해서 만들어진 바이너리가 만들어내는 바이너리가 실행되는 OS/기계
--build 와 --host 는 금방 알 수 있을 것이라 생각한다. 하지만 --target 의 경우에는 다소 헛갈린다. 실제로도 --target 의 경우는 거의 쓰이지 않는다. 대체로 gcc 같은 툴체인을 컴파일할 때 주로 쓰인다.
몇 가지를 예를 들어보자. 윈도에서 많이 사용되는 GNU 툴체인인 mingw 의 경우, 리눅스용 크로스 컴파일러를 제공한다. 이를 이용하면 리눅스에서 윈도용 바이너리를 만들어낼 수 있다. 이 때 사용하는 configure 옵션의 예는 다음과 같다.
configure --host=i686-w64-mingw32
i686-w64-mingw32 는 host triplet(CPU-VENDOR-OS) 으로 32 비트용 윈도용 프로그램(i686)을 mingw-w64(w64) 툴체인으로 만든다는 뜻이다.
만약, 윈도에서 실행되지만, ARM 용 바이너리를 만들어내는 바이너리를 인텔용 32비트 리눅스에서 만들고자 한다면, configure 옵션은 이런 모습이 될 것이다.
configure --build=i686-pc-linux-gnu --host=i686-w64-mingw32 --target=arm-linux
사용된 옵션들의 뜻을 정리하면 이렇다.
- --build=i686-pc-linux-gnu : 인텔용 리눅스에서 만든다
- --host=i686-w64-mingw32 : 만들어진 바이너리는 32 비트용 윈도에서 실행된다
- --target=arm-linux : 이 바이너리는 arm 리눅스에서 실행되는 바이너리를 만든다
이제는 --build, --host, --target 을 헛갈리지 말자.
음.. w64 면 Win64 아닐까요? mingw32 랑 같이 있으니 헷갈리네요
답글삭제w64 와 mingw32 가 같이 있어서 64비트인지 32비트인지 항상 헛갈립니다. 이름을 왜 이렇게 지어가지고... 그런데 실제 구분은 i686과 x86_64 로 합니다. 그래서 Win64 는 x86_64-w64-mingw32 입니다.
삭제