Working with Xcode Build Settings

OSXDEV

Jump to: navigation, 찾기

노련한 Xcode 유저가 되기 위해서는 Xcode의 중요한 두 가지 컨셉을 이해해야 합니다. 첫번째는 Xcode 프로젝트를 어떻게 정의하고 구성할 것인가입니다. 두번째는 Xcode의 빌드 시스템이 프로젝트에서 어떤 target으로 설정될 것인가 입니다. 이전의 ADC 아티클인 Understanding Xcode Projects에는 Xcode 프로젝트가 어떻게 구성되어 있는 지에 대해 설명하고 하고 있습니다. 자 이제부터는 Xcode의 빌드 시스템이 프로젝트로부터 프로덕트를 어떻게 생성하는지 살펴보겠습니다. 빌드 프로세스는 빌드 세팅과 빌드 컨피규레이션에 의해 커스터마이징될 수 있습니다.

Xcode 빌드 시스템은 커스터마이징이 매우 유연하합니다. 따라서 기본 설정 그대로 사용할 수도 있고 원하는 대로 복잡한 설정을 할 수 도 있습니다. 빌드 세팅과 빌드 컨피규레이션이 어떻게 작동되는지 기본 원리를 이해하면 간단하게 설정할 수 있으며 이 아티클을 또한 쉽게 정리되어 있습니다.


목차

[편집] Xcode는 product를 어떻에 빌드하는가?

프로젝트를 빌드하기 위해서, Xcode 빌드 시스템은 설정된 빌드 작업 순서에 따라 명령을 수행합니다. 이러한 명령들은 많은 command line를 실행하고 GCC 컴파일러, javac, jikes와 같은 여러 종류의 툴을 유용하게 사용합니다. 일반적인 target 세팅을 살펴봅시다.

target은 빌드를 위한 여러 명령으로 구성되어 있습니다. 각 빌드 명령들은 하나 이상의 파일에 저장되어 있습니다. 그림 1을 통해 이 구조를 세부적으로 보여드립니다.

 그림 1 : 프로덕트를 생성하기 위해 구성된 target과 빌드 스텝

그림 1 : 프로덕트를 생성하기 위해 구성된 target과 빌드 스텝

각 빌드 명령들은 Xcode 빌드 시스템에 의해 진행되며, 일련의 명령들은 생성된 후 실행됩니다. 대부분의 시간동안, 이러한 명령어는 백그라운드로 진행되나, 미스터리로 남을 필요는 없습니다. 빌드 시스템이 취하는 스텝을 볼 수 있으며, 명령어들은 빌드 시스템에 의해 생성되고 빌드 결과 윈도우에 표시됩니다. Build > Build ResultsCommand-shift-B를 이용해 결과를 볼 수 있습니다.

 그림 2 : build result windows에 표시되는 target의 빌드 과정

그림 2 : build result windows에 표시되는 target의 빌드 과정

빌드 시스템이 입력하고 실행한 모든 명령의 결과가 target의 프로덕트입니다. 간단한 코코아 어플리케이션의 경우 이미 사용할 수 있습니다. 보다 간단한 경우는 책의 예제에 따라 코코아 어플리케이션을 손쉽게 빌드할 수 있습니다. 더 많은 내용을 알 필요도 없습니다. 하지만 소프트웨어 개발자라면 쉽게 알수 있으므로, 숙련도를 높이기 위해서는 빌드 시스템을 어떻게 커스터마이징할 수 있는 지 알아두는 것이 좋습니다. 이것을 알기 위해서는 빌드 설정을 알아야 합니다.


[편집] Build Settings

기본적으로 빌드 설정은 빌드 시스템에 전달하는 정보입니다. 빌드 설정은 Zero link와 같은 기능을 켜거나 끌 수 있습니다. 빌드될 프로덕트듸 이름과 같은 속성을 설정할 수도 있습니다. GCC에서 -Wmost와 같은 툴 설정을 변경할 수도 있습니다.

빌드 설정의 레벨은 여러가지가 있습니다. 프로젝트 레벨에서의 설정과 target 레벨에서의 설정입니다. 프로젝트와 target에서의 설정을 보기위ㅐ서는 info inspector를 열고 그림 3과 같이Build 탭을 선택합니다.

 그림 3 : 프로젝트 target에 대한 빌드 설정

그림 3 : 프로젝트 target에 대한 빌드 설정

-Wmost 플래그 설정은 Other Warning Flags이며 이것을 일반적으로 기본 빌드 설정입니다. target에 대한 빌드 스크립트를 살며보면 다음과 같습니다.

/usr/bin/gcc-4.0 [many flags] -Wmost [many other flags] 
-c /Developer/Examples/AppKit/DotView/DotView.m -o
/Developer/Examples/AppKit/DotView/build/DotView.build/Release/DotView.build/Objects-normal/ppc/DotView.o

만약 -Wmost 대신 -Wall 플래그를 사용한다면, Other Warning Flags 빌드 설정에서 -Wall 로 다음과 같이 변경됩니다.

/usr/bin/gcc-4.0 [many flags] -Wall [many other flags] -c /Developer/Examples/AppKit/DotView/DotView.m -o
/Developer/Examples/AppKit/DotView/build/DotView.build/Release/DotView.build/Objects-normal/ppc/DotView.o

예제에서는 간단한 컴파일러 플래그를 사용했습니만, 대부분의 모든 빌드는 설정을 변경할 수 있습니다. 사용하는 GCC 버전을 변경하거나 (GCC_VERSION), 프로덕트 명(PRODUCT_NAME), 빌드할 아키텍쳐(ARCHS)를 설정할 수 있습니다. 간단하게 빌드 설정은 빌드 시스템의 실제 조절 손잡이이며, target과 프로젝트 inspector를 이용해 변경할 수 있습니다.


[편집] 원하는 빌드 설정 찾기

변경 가능한 모든 빌드 설정의 수가 많아 변경하고자 하는 빌드 설정을 쉽게 찾을 수 없는 경우가 있습니다. 이 경우 inspector 윈도우의 Search Box을 이용하시면 됩니다. 그림 4와 같이 찾고자 하는 설정의 일부분만을 입력해도 관련된 설정을 보실 수 있습니다.

 그림 4 : 찾고자 하는 빌드 설정 찾기

그림 4 : 찾고자 하는 빌드 설정 찾기

빌드 설정에 대한 설명도 검색에 포함되기 때문에 보다 손쉽게 검색 하실 수 있습니다.


[편집] Build Setting Precedence

앞서 말씀드린 것처럼 프로젝트와 target 레벨에 대해 빌드 설정을 하실 수 있습니다. 하지만 일부의 경우 Xcode 자체에 대한 빌드 설정을 변경해야 하는 경우도 있습니다.

선행 빌드 설정은 다음과 같습니다.

  1. xcodebuild 커맨드 라인 플래그 (커맨드 라인 빌드에만 해당)
  2. target. target의 info inspector를 통해서만 변경가능
  3. project. project의 info inspector를 통해서만 변경가능
  4. Xcode의 어플리케이션 세팅은 Xcode > Preferences... 에서 변경
  5. Xcode의 기본 설정
  6. 사용 환경은 사용자의 홈 디렉터리에 저장. (~/.MacOSX/environment.plist)

예를들어, 만약 Other Warning Flag 빌드 설정을 -Wnone으로 설정했다면 Other Warnings Flags는 -Wall로 설정됩니다. target의 -Wall의 값은 Xcode의 GUI를 통해 설정할 수 있습니다.

만약 다음과 같은 명령어를 입력한다면 :

$ xcodebuild WARNING_CFLAGS=-Wmost

소스 코드 파일은 -Wmost 플래그로 컴파일 됩니다.

이러한 선행 옵션들은 매우 손쉽게 설정할 수 있으며, 프로젝트 레벨의 설정은 target 레벨에 설정에 영향을 줍니다. 따라서 프로젝트의 설정은 모든 target 설정에 영향을 주게 됩니다. 이러한 관계를 미리 알고 있으면 설정에 도움을 얻을 수 있습니다.


[편집] Build Configurations

프로젝트 레벨에서의 다양한 설정을 일일이 변경하기에는 설정 사항이 너무나 많습니다. 또한 각 상황별로 별도의 설정을 맞추어 빌드하려면 더더욱 많은 손이 갈 수 밖에 없습니다. 단순히 릴리즈 버전을 빌드하려는 경우에도 조금씩 다른 환경을 위해 매번 설정한다는 것은 매우 번거로운 일입니다. 하지만 Xcode는 Build Configuration이라는 편리한 기능을 통해 상황별 설정을 묶어 미리 설정할 수 있습니다.

Build Configuration은 target이나 프로젝트의 빌드 설정의 집합입니다. 또한 기존 설정을 변경하여 별도의 설정을 만들 수도 있습니다.

특별한 변경을 하지 않았다면 Xcode에서는 Release와 Debug라는 두개의 Build Configuration를 제공합니다. 이름에서 살펴볼 수 있는 것처럼 하나의 설정은 개발중 디버거를 위한 설정이면 다른 하나는 고객에게 제공될 빌드를 만드는 Build Configuration입니다. 두 가지 Build Configuration의 가장 큰 차이점은 디버그 빌드로 이것은 되도록 빨리 컴파일하며 개발 작업을 용이하게 만들어 줍니다. 릴리즈 빌드의 경우 universal binary를 생성할 수 있습니다.

Architectures (ARCHS) 세팅은 이러한 설정을 변경하는 플래그입니다. 그림 5에서 보시는 것처럼 디버그 빌드 설정(좌측) 현재 Xcode가 실행되고 있는 CPU 아키텍쳐에 따라 빌드되도록 설정되어 있습니다. ( $(NATIVE_ARCH) ) 릴리즈 설정은 (우측) PowerPC와 Inter 아키텍쳐 모두에서 실행될 수 있도록 설정되어 있습니다. (ppc i386)

 그림 5 : 기본 Build Configuration

그림 5 : 기본 Build Configuration

릴리즈와 디버그 사이의 또 다른 차이점은 디버그 빌드에서는 debugging symbol이 생성되며 릴리즈 빌드에서는 제거된다는 것입니다. 또한 디버그 빌드에서는 최적화 옵션이 꺼져 있고, 반대로 릴리즈에서는 최적화 옵션이 적용됩니다. 그림 6에서 보시는 것처럼 Optimization Level (GCC_OPTIMIZATION_LEVEL) 이 서로 다릅니다.

 그림 6 : 디버그와 릴리즈의 서로 다른 Optimization Level

그림 6 : 디버그와 릴리즈의 서로 다른 Optimization Level

빌드 설정처럼, build configuration도 프로젝트와 target 레벨에 각각 설정할 수 있습니다. 새로운 설정을 만드는 경우 항상 기존의 설정을 그대로 사용한다는 것을 주의하시기 바랍니다.

[편집] Build Configuration Files

10개 이상의 프로젝트에서 많은 수의 target을 생성해야 한다면 설정을 별도로 관리하기가 쉽지 않습니다. 이런 경우 별도의 configuration file을 생성하여 사용한다면 보다 손쉽게 관리할 수 있습니다.

예를 들어 표준 디버그 설정이 있다면 별도의 configuration file로 저장합니다. (되도록 DebugSettings.xcconfig로 설정합니다.) 디버그 빌드 configuration file을 기반으로 target 또는 프로젝트를 설정할 수 있으며 이후 이 파일을 수정하여 설정을 변경할 수도 있습니다.

build configuration file은 간단한 플레인 텍스트로 저장되며 빌드 설정의 변수 이름은 모두 대문자로 되어 있습니다. 예를 들면

ZERO_LINK = NO
GCC_OPTIMIZATION_LEVEL = -O0
GCC_GENERATE_DEBUGGING_SYMBOLS = YES

build configuration file이 이미 있다면, 그림 7과 같이 프로젝트에 간단히 추가할 수 있습니다.

 그림 7 : 사용하고자 하는 build configuration file을 프로젝트에 추가

그림 7 : 사용하고자 하는 build configuration file을 프로젝트에 추가

build-configuration-file은 프로젝트 간에도 공유할 수 있으므로 모든 프로젝트가 접근할 수 있는 위치에 두고 필요한 경우 프로젝트에 추가하면 됩니다.


[편집] 더 많은 정보

이 아티클은 빌드 설정과 build configuration에 대한 문서입니다. 보다 상세한 정보는 아래의 문서들을 참고하시기 바랍니다.

  • Xcode 페이지에서 Download Xcode 2.2버튼을 눌러 현재 버전의 Xcode를 받으시기 바랍니다. ADC에 ID 없는 경우 무료 온라인 회원으로 가입 후 다운로드하실 수 있습니다.
  • Xcode에 대한 보다 자세한 정보는 Xcode 2.2 User Guide를 참고하시기 바랍니다.
  • Xcode의 빌드 설정에 관한 최신 정보는 Xcode 2.2 Build Settings Notes를 참고하시기 바랍니다.


이 문서의 원본은 ADC Home > Tools> Xcode > Working with Xcode Build Settings 입니다.