Xcode 빌드 설정에서 "아키텍처"와 "유효한 아키텍처"의 차이점은 무엇입니까?


답변:


113

아키텍처는 빌드하려는 아키텍처이고 유효한 아키텍처는 코드베이스로 빌드 할 수있는 아키텍처입니다.

따라서 armv7s 용 바이너리 만 빌드하고 싶을 수도 있지만 armv7 및 armv6 용으로 동일한 소스 코드가 잘 컴파일됩니다. 그래서 VALID_ARCHS = armv6 armv7 armv7s,하지만 ARCHS = armv7s그게 실제로 코드로 빌드 하려는 전부이기 때문에 설정 합니다.

또는 Apple-ese에서 :

ARCHS (아키텍처)

공백으로 구분 된 식별자 목록입니다. 바이너리가 대상이되는 아키텍처 (ABI, 프로세서 모델)를 지정합니다. 이 빌드 설정이 둘 이상의 아키텍처를 지정하면 생성 된 바이너리에 지정된 각 아키텍처에 대한 개체 코드가 포함될 수 있습니다.

과:

VALID_ARCHS (유효한 아키텍처)

공백으로 구분 된 식별자 목록입니다. 바이너리를 빌드 할 수있는 아키텍처를 지정합니다. 빌드 중에이 목록은 ARCHS 빌드 설정 값과 교차합니다. 결과 목록은 바이너리가 실행할 수있는 아키텍처를 지정합니다. 결과 아키텍처 목록이 비어있는 경우 대상은 바이너리를 생성하지 않습니다.

출처 : Xcode 빌드 설정 참조

실제로는 그대로두고 VALID_ARCHS변경하는 것에 대해 걱정하지 않고 ARCHS빌드하려는 아키텍처를 설정하기 위해 조작합니다. 일반적으로 NATIVE_ARCH테스트 / 실행할 머신에 대한 디버그 버전 만 빌드하고 지원하려는 전체 아키텍처에 대한 릴리스 빌드를 원하기 때문에 디버그 빌드를 just로 설정합니다 .


1
@DanMoore "결과 아키텍처 목록"은 빌드시 메모리에서 수행됩니다.
Saltymule 2014-04-21

3
@ onmyway133 대부분의 경우 VALID_ARCHS를 원하지 않습니다. 특정 아키텍처에 대해서만 인라인 asm을 작성했다면 VALID_ARCHS를 변경하여 코드가 더 이상 해당 아키텍처를위한 것이 아니라는 것을 반영 할 수 있습니다. 그러나 대부분은 Xcode에서 빌드 할 있는 아키텍처를 나타내는 단서 일 뿐이며 ARCHS를 위해 거기에서 선택합니다.
제레미 W. 셔먼

4

애플의 문서에서, 우리는 바이너리 엑스 코드의 뜻 빌드 목록입니다 알고 Valid Architectures 와 교차 Architectures.

그래서 나는 Jeremy의 대답이 옳지 않다고 생각합니다.

따라서 armv7s 용 바이너리 만 빌드하고 싶을 수도 있지만
armv7 및 armv6 용으로 동일한 소스 코드가 잘 컴파일됩니다. 그래서 VALID_ARCHS = armv6 armv7 armv7sARCHS = armv7s로 설정했습니다. 그게 실제로 코드로 빌드하려는 전부이기 때문입니다.

설정 VALID_ARCHS = armv6 armv7 armv7s하고 설정 ARCHS = armv7s하면 바이너리 Xcode가 빌드되는 결과는 armv7s이며 armv6 / armv7과 호환되지 않습니다.

그리고 armv6 / armv7 / armv7s와 호환되도록하려면 VALID_ARCHS = armv6 armv7 armv7s및을 설정해야합니다 ARCHS = armv6. 이런 식으로 바이너리 Xcode의 결과는 armv6이고 arm 프로세서가 하위 호환되므로 armv6 / armv7 / armv7s 모두에서 제대로 실행될 수 있습니다. .


1
그가 옳았다 : "왜냐하면 그것이 실제로 코드 로 빌드하고 싶은 전부이기 때문이다 ."
Laszlo
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.